Spark/Scala关联两个JSON文件生成DataFrame操作不生效问题排查
问题排查与修复方案
你的代码存在3个核心问题导致关联操作未生效:
- 你提前为test_2.json定义了
user_schema,但读取文件时没有传入该schema参数,实际解析出的表结构可能和预期不符,直接导致关联字段无法匹配 - Spark采用懒执行机制,你完成关联逻辑定义、编写SQL查询语句后,没有添加
show()/collect()等触发实际计算的action操作,关联逻辑根本不会执行 table是Spark SQL的保留关键字,你在查询语句中直接作为字段名使用会被识别为语法错误,需要用反引号包裹
修正后的代码片段
- 读取test_2.json时添加schema指定:
val users_df_2 = spark.read.option("multiLine", "true").schema(user_schema).json(json_multiline_file_path)
- 关联与查询部分添加触发操作、修正关键字问题:
users_df_2.join(users_df_1,"table").createOrReplaceTempView("new_table") val results = spark.sql("SELECT Scenerio, `table`, case WHEN gender = 'F' then 'Female' WHEN gender = 'M' then 'Male' END as gender from new_table") // 触发计算打印结果 results.show(10,false)
如果修正后关联结果仍为空,可以分别打印两个DataFrame的table字段值,确认是否存在可以匹配的交集数据(默认join为内连接,无匹配数据时结果为空)。
内容的提问来源于stack exchange,提问作者JoeyOC
相关产品推荐
相关产品推荐

