将原始df中的列添加到pyspark中的摸索df中

时间:2018-11-12 13:25:47

标签: python apache-spark pyspark

您好,我已经使用以下命令从原始数据帧创建了分组数据帧:

sp2 = spark_df.drop_duplicates().groupBy('Transaction').agg(F.collect_list("Product").alias("items"))

我的spark_df数据帧有三列:TransactionProductsCustomerID

我想将CustomerID列放到sp2数据框中(不会分组)。

当我尝试使用此命令加入它时:

df_joined = sp2.join(spark_df, "CustomerID")

我收到此错误消息:

  

Py4JJavaError:调用o44.join时发生错误。 :   org.apache.spark.sql.AnalysisException:使用列CustomerID   无法在联接的左侧进行解析。左侧   栏:[交易,项目];

1 个答案:

答案 0 :(得分:1)

发生此错误是因为您的CustomerID数据框中没有sp2列。因此您无法在CustomerID上加入他们。建议您在CustomerID数据框中创建一个None值的sp2列,然后在spark_df列中将CustomerID与其连接。

这是执行此操作的示例代码:

import pyspark.sql.functions as f

sp2 = sp2.withColumn('CustomerID', f.lit("None").cast(StringType()))

df_joined = sp2.join(spark_df, "CustomerID")

更新:将CustomerID列添加到分组数据中的另一种方法是使用first函数:

import pyspark.sql.functions as F

sp2 = spark_df.drop_duplicates().groupBy('Transaction').agg(F.collect_list("Product").alias("items"), F.first('CustomerID').alias('CustomerID'))