我有一个数据集,它是一个监督层次结构,前两列是 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
是上表的前两列 sup_org
是整张table吗
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列表没有attribute.items()的错误
2条答案
按热度按时间kx1ctssn1#
可以对每个级别列执行自联接:
xurqigkl2#
可以使用相关子查询从id获取相应的名称: