私は監督の階層であるデータセットを持っており、最初の2つの列があるid
とname
し、次の列がありlevel 1
、level 2
、level 3
など。
それぞれlevel xx
に、id列に関連する番号があります。
id name level 1 level 2 level 3
11 sup org 1 222 333 444
222 sup org 2 11 222 333
333 sup org 3 11 222 333
456 sup org 4 222 444 333
私が探しているのは
id name level 1 level 2 level 3
11 sup org 1 supr org 2 sup org 3 sup org 4
222 sup org 2 sup org 1 sup org 2 sup org 3
333 sup org 3 sup org 1 sup org 2 sup org 3
444 sup org 4 sup org 2 sup org 4 sup org 3
rdd
関数を使おうとしましたが、関数がホワイトリストに登録されていないというエラーが表示されますか?
私は次のことを試しました:ここで、sup_lookup
は上の表の最初の2列で、は表sup_org
全体です
dict1 = [row.asDict() for row in sup_lookup.collect()]
mapping_expr = create_map([x for x in chain(*dict1.items())])
df = sup_org.withColumn('Level1', mapping_expr[sup_org['Level 1']]).withColumn('Level 2', mapping_expr[sup_org['Level2']]).withColumn('Level3', mapping_expr[sup_org['Level 2']])
しかし、dict1リストに属性.items()がないことについてエラーが発生します
各レベルの列で自己結合を実行できます。
from pyspark.sql import functions as F
df1 = df.alias("df") \
.join(df.alias("lvl1"), F.col("lvl1.id") == F.col("df.`level 1`"), "left") \
.join(df.alias("lvl2"), F.col("lvl2.id") == F.col("df.`level 2`"), "left") \
.join(df.alias("lvl3"), F.col("lvl3.id") == F.col("df.`level 3`"), "left") \
.selectExpr("df.id", "df.name", "lvl1.name as `level 1`", "lvl2.name as `level 2`", "lvl3.name as `level 3`")
df1.show()
#+---+---------+---------+---------+---------+
#| id| name| level 1| level 2| level 3|
#+---+---------+---------+---------+---------+
#|222|sup org 2|sup org 1|sup org 2|sup org 3|
#|333|sup org 3|sup org 1|sup org 2|sup org 3|
#|444|sup org 4|sup org 2|sup org 4|sup org 3|
#| 11|sup org 1|sup org 2|sup org 3|sup org 4|
#+---+---------+---------+---------+---------+
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加