【问题标题】:pyspark: referencing columns by dataframe during a joinpyspark:在连接期间按数据框引用列
【发布时间】:2021-04-17 10:43:55
【问题描述】:

我正在尝试像这样加入两个 pyspark 数据帧

joined = df.join(df1,on=["date"],how='left').select([col('df.'+xx) for xx in df.columns] + [col('df1.daily_net_payment_sum'),col('df1.daily_net_payment_avg')])

但结果是

An error was encountered:
"cannot resolve '`df.cust_no`' given input columns: 

在我看来,我无法通过它们的数据框/表名称来引用列。使用火花 2.4.7

任何想法表示赞赏

【问题讨论】:

  • 你能把这两个 DF 的架构贴出来吗?还是整个堆栈跟踪?或者显示关于两个 DF 的陈述。这个问题说明不了什么

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

您可以通过首先为每个数据集创建aliases 来实现此目的。

df = df.alias("df")
df1 = df1.alias("df1")
joined = df.join(df1,on=["date"],how='left').select([col('df.'+xx) for xx in df.columns] + [col('df1.daily_net_payment_sum'),col('df1.daily_net_payment_avg')])

【讨论】:

  • 我猜即使没有别名也应该可以使用列名
  • 我在发布之前运行了一个快速测试以创建与另一个模式的类似连接。当前缀为 dfdf1 时,列名不可用,除非 spark 知道每个 daraframe 的别名。该操作正在询问如何使用这些别名作为前缀来引用 daraframe。
  • @ggordon 谢谢!那行得通。令人惊讶的是,它没有别名就无法识别它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2017-11-23
  • 2021-09-25
  • 2020-09-19
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多