[英]How to perform a triple join with pyspark using dataframes?
我需要在 spark 中使用 3 个三个数据帧执行三重连接。
首先,我通过对下一个参数执行双重连接来获取主数据帧“nodd”,其中包含先前加载的数据帧“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];;
我不明白这个错误,因为使用具有相同格式(两个“字符串”类型列)的完全相同的列在两个数据帧上的连接性能完全相同。
执行第三个连接时是否有任何问题或以任何其他方式执行此三重连接?
如果列 - CRAB_DataBlock
来自数据jobreports
- jobreports
在下面使用,这是一个编码标准
final_join=nodd.join(jobreports, nodd.b_block_name == jobreports.CRAB_DataBlock, "left" )
执行此操作后,如果您仍然遇到上述问题,则表示指定的列在数据jobreports
不可用,您需要进一步调试为什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.