使用Bunsen做FHIR到Spark数据转换时调用extract_entry出现Py4JJavaError
问题根因
你遇到的java.lang.NoSuchMethodError报错是Spark版本与Bunsen版本不兼容导致的:
你当前使用的Spark 3.2.0对Catalyst内部的表达式API做了不兼容修改,而你安装的Bunsen 0.5.10版本官方仅适配Spark 2.3、Spark 2.4版本,调用已移除的内部API就会触发该错误。
可落地的解决方案
- 方案1:降级Spark版本到适配范围
替换当前Spark 3.2.0为Spark 2.4.8版本,配套使用Python 3.6/3.7(Spark 2.4不支持Python 3.8及以上版本),版本匹配后原有代码可以直接正常运行。 - 方案2:使用适配Spark 3.x的Bunsen编译版
官方原版Bunsen已停止维护,可使用社区适配Spark 3.x的fork分支自行编译Bunsen的jar包和Python模块,适配后即可在Spark 3.2环境下正常调用相关接口。 - 方案3:临时绕开Bunsen的extract_entry方法验证数据
若暂时不想调整依赖版本,可直接用PySpark原生接口读取解析Bundle数据:# 读取所有Bundle JSON文件 bundles_df = spark.read.json("C:\\Users\MoemenEbdelli\Desktop\oumaima\bundles\\*.json") # 展开entry字段,过滤Patient资源 patient_df = bundles_df.selectExpr("explode(entry) as entry") \ .filter("entry.resource.resourceType = 'Patient'") \ .select("entry.resource.*") \ .cache()
内容的提问来源于stack exchange,提问作者moe_
相关产品推荐
相关产品推荐

