【问题标题】:How to perform a triple join with pyspark using dataframes?如何使用数据帧与 pyspark 执行三重连接?
【发布时间】: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


    【解决方案1】:

    如果列 - CRAB_DataBlock 来自数据框 - jobreports 在下面使用,这是一个编码标准

    final_join=nodd.join(jobreports, nodd.b_block_name == jobreports.CRAB_DataBlock, "left" )

    执行此操作后,如果您仍然遇到上述问题,则表示数据框中没有指定的列jobreports,您需要进一步调试为什么?

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 2021-05-16
      • 2017-11-02
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多