Python 将pyspark dataframe数组列中每个数组的值替换为相应的ID
我有一个Python 将pyspark dataframe数组列中每个数组的值替换为相应的ID,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我有一个pyspark.sqldataframe,看起来像这样: 身份证件 名称 裁判 1 A B、 C,D 2 B A 三 C A、 B 您可以分解数组,使用分解后的ref和name进行自联接,并使用collect\u list将联接的ID收集回数组 import pyspark.sql.functions as F df1 = df.select('id', 'name', F.explode('refs').alias('refs')) df2 = df.toDF('id2', 'nam
pyspark.sql
dataframe,看起来像这样:
身份证件
名称
裁判
1
A
B、 C,D
2
B
A
三
C
A、 B
您可以
分解
数组,使用分解后的ref和name进行自联接,并使用collect\u list
将联接的ID收集回数组
import pyspark.sql.functions as F
df1 = df.select('id', 'name', F.explode('refs').alias('refs'))
df2 = df.toDF('id2', 'name2', 'refs2')
result = df1.join(df2, df1.refs == df2.name2) \
.select('id', 'name', 'id2') \
.groupBy('id', 'name') \
.agg(F.collect_list('id2').alias('refs'))
result.show()
+---+----+------+
| id|name| refs|
+---+----+------+
| 1| A|[2, 3]|
| 2| B| [1]|
| 3| C|[1, 2]|
+---+----+------+
您可以
分解
数组,使用分解后的ref和name进行自联接,并使用collect\u list
将联接的ID收集回数组
import pyspark.sql.functions as F
df1 = df.select('id', 'name', F.explode('refs').alias('refs'))
df2 = df.toDF('id2', 'name2', 'refs2')
result = df1.join(df2, df1.refs == df2.name2) \
.select('id', 'name', 'id2') \
.groupBy('id', 'name') \
.agg(F.collect_list('id2').alias('refs'))
result.show()
+---+----+------+
| id|name| refs|
+---+----+------+
| 1| A|[2, 3]|
| 2| B| [1]|
| 3| C|[1, 2]|
+---+----+------+
我不得不用
collect\u set
替换collect\u列表
,以避免重复的id值。除此之外,这一切都很完美。感谢洛蒂用collect\u set
替换了collect\u list
,以避免重复的id值。除此之外,这一切都很完美。谢谢