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值。除此之外,这一切都很完美。谢谢