【发布时间】:2020-11-04 19:56:21
【问题描述】:
我需要在 spark 中使用 3 个三个数据帧执行三重连接。
首先,我通过对下一个参数执行双重连接获得主数据帧“点头”,之前加载的数据帧“dbs_files”和“dbs_blocks”。
jobreports = spark.read.json(inputfile)
popularity = spark.read.json(hdir)
nodd= (popularity
.filter(col('data.site_name')=="T1_ES_PIC")
.join(dbs_files, col('data.file_lfn')==col('f_logical_file_name'))
.join(dbs_blocks, col('f_block_id')==col('b_block_id'))
.select('data.file_lfn', 'f_logical_file_name', 'f_creation_date', 'b_block_id', 'b_block_name'))
nodd.show(20)
输出:
+--------------------+--------------------+---------------+----------+--------------------+
| file_lfn| f_logical_file_name|f_creation_date|b_block_id| b_block_name|
+--------------------+--------------------+---------------+----------+--------------------+
|/store/mc/RunIISu...|/store/mc/RunIISu...| null| 23329663|/VBFHHTo2G2Qlnu_C...|
|/store/mc/RunIISu...|/store/mc/RunIISu...| null| 23329663|/VBFHHTo2G2Qlnu_C...|
...
最后,我对指定参数的“jobreports”数据帧执行最后一次连接
final_join=nodd.join(jobreports, col('b_block_name')==col('CRAB_DataBlock'))
获取下一条错误信息:
Py4JJavaError: An error occurred while calling o109.join.
: org.apache.spark.sql.AnalysisException: cannot resolve '`CRAB_DataBlock`' given input columns: [f_creation_date, metadata, f_logical_file_name, data, b_block_id, file_lfn, b_block_name];;
...
AnalysisException: "cannot resolve '`CRAB_DataBlock`' given input columns: [f_creation_date, metadata, f_logical_file_name, data, b_block_id, file_lfn, b_block_name];;
我不明白这个错误,因为在两个数据帧上使用完全相同的列和相同格式(两个“字符串”类型列)的连接性能完全相同。
在执行第三次连接时是否有任何问题或以任何其他方式执行此三次连接?
【问题讨论】:
标签: python pandas apache-spark pyspark