[英]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.