您好,我已经使用以下命令从原始数据帧创建了分组数据帧:
sp2 = spark_df.drop_duplicates().groupBy('Transaction').agg(F.collect_list("Product").alias("items"))
我的spark_df
数据帧有三列:Transaction
,Products
和CustomerID
我想将CustomerID
列放到sp2
数据框中(不会分组)。
当我尝试使用此命令加入它时:
df_joined = sp2.join(spark_df, "CustomerID")
我收到此错误消息:
Py4JJavaError:调用o44.join时发生错误。 : org.apache.spark.sql.AnalysisException:使用列
CustomerID
无法在联接的左侧进行解析。左侧 栏:[交易,项目];
答案 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'))