我有一個帶有 ArrayType 列的 Spark 資料框:
|id|neighbors|
-- ---------
|a |[b,c] |
|b |[a,d] |
|c |[a] |
|d |[b] |
-- ---------
我需要使用初始資料框映射此 ArrayType 列中的值。
期望的輸出:
|id|neighbors |
-- -------------
|a |[[a,d],[a]] |
|b |[[b,c],[b]] |
|c |[[b,c]] |
|d |[[a,d]] |
-- -------------
處理這個問題的最佳方法是什么?我有非常大量的資料(大約 1 億條記錄)。
uj5u.com熱心網友回復:
您將需要explode列“鄰居”,然后只需join. 此外,由于這是自連接,因此建議在資料幀上使用alias。
初始df:
from pyspark.sql import functions as F
df = spark.createDataFrame(
[('a', ['b', 'c']),
('b', ['a', 'd']),
('c', ['a']),
('d', ['b'])],
['id', 'neighbors']
)
轉型:
df = (
df.withColumn('_neighbors', F.explode('neighbors')).alias('df1')
.join(df.alias('df2'), F.col('df1._neighbors') == F.col('df2.id'))
.groupBy('df1.id')
.agg(F.collect_list('df2.neighbors').alias('neighbors'))
)
df.show()
# --- -------------
# | id| neighbors|
# --- -------------
# | d| [[a, d]]|
# | c| [[b, c]]|
# | b|[[b, c], [b]]|
# | a|[[a, d], [a]]|
# --- -------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468331.html
標籤:Python 数组 阿帕奇火花 pyspark apache-spark-sql
上一篇:SparkUDF錯誤AttributeError:'NoneType'物件沒有屬性'_jvm'
下一篇:來自字典的Spark資料框
