您好我有2個dataframes加入蟒蛇+ pyspark:上內差錯多列比較捧場pyspark
#df1
name genre count
satya drama 1
satya action 3
abc drame 2
abc comedy 2
def romance 1
#df2
name max_count
satya 3
abc 2
def 1
現在我想加入上述2個DFS的名稱和數量== MAX_COUNT,但我收到錯誤
import pyspark.sql.functions as F
from pyspark.sql.functions import count, col
from pyspark.sql.functions import struct
df = spark.read.csv('file',sep = '###', header=True)
df1 = df.groupBy("name", "genre").count()
df2 = df1.groupby('name').agg(F.max("count").alias("max_count"))
#Now trying to join both dataframes
final_df = df1.join(df2, (df1.name == df2.name) & (df1.count == df2.max_count))
final_df.show() ###Error
#py4j.protocol.Py4JJavaError: An error occurred while calling o207.showString.
: org.apache.spark.SparkException: Exception thrown in awaitResult:
at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:194)
#Caused by: java.lang.UnsupportedOperationException: Cannot evaluate expression: count(1)
at org.apache.spark.sql.catalyst.expressions.Unevaluable$class.doGenCode(Expression.scala:224)
但成功與「左」加入
final_df = df1.join(df2, (df1.name == df2.name) & (df1.count == df2.max_count), "left")
final_df.show() ###Success but i don't want left join , i want inner join
我的問題是,爲什麼上面的一個失敗,我我在那裏做錯了什麼?
我把這個鏈接「Find maximum row per group in Spark DataFrame」。使用第一個答案(2 groupby方法)。但是同樣的錯誤。
我在spark-2.0.0-bin-hadoop2.7和python 2.7上。
請建議。謝謝。
編輯:
上述場景可與火花1.6(這是相當奇怪,這有什麼錯火花2.0(或與我安裝,我將重新安裝,檢查和更新這裏))。
有沒有人在spark 2.0上試過這個,通過下面的Yaron的回答得到了成功?
只是一個猜測.....列名與數據框方法衝突?例如。 'count'。不知道爲什麼只會影響內連接。你可以嘗試將'count'重命名爲'cnt',或者只是爲了排除這種可能性。 – RedBaron
@ RedBaron-Alredy嘗試了這個.Same錯誤。 – Satya