陣列切片[:-1]
在PySpark中不起作用並返回空字符串。下面我列出了兩種可能的解決方法。
如果你樂於使用SparkSQL你可以寫你的加入SQL:
df1 = sc.parallelize([('ToyotaA',100),('ToyotaB',200),('AudiA',300),('AudiB',400)]).toDF(['Key','Count'])
sqlContext.registerDataFrameAsTable(df1, "df1")
df2 = sc.parallelize([('Toyota',300),('Audi',700)]).toDF(['Key','Count'])
sqlContext.registerDataFrameAsTable(df2, "df2")
df_combined = sqlContext.sql("select df1.Key,df2.Key,df1.Count,df2.Count from df1 df1 inner join df2 df2 on substring(df1.Key, 0, LENGTH(df1.Key) -1) = df2.Key")
df_combined.show()
或者,您可以添加一個新列的第一個數據幀包含清洗鍵:
from pyspark.sql.types import StringType
from pyspark.sql.functions import udf
substring_udf = udf(lambda value: value[:-1], StringType())
df1=df1.withColumn("cleaned_key", substring_udf(df1.Key))
df1.join(df2, df1.cleaned_key == df2.Key, 'inner').show()
最新的解決方案當然是在聯接中使用udf,但是,在寫這篇文章的時候,PySpark尚未支持。
謝謝哈科,PySpark函數的工作。感謝您確認Spark目前尚不支持所需的功能。 –