我想知道如何映射数据帧中特定列中的值。
我有一个数据框,看起来像:
df = sc.parallelize([('india','japan'),('usa','uruguay')]).toDF(['col1','col2'])
+-----+-------+
| col1| col2|
+-----+-------+
|india| japan|
| usa|uruguay|
+-----+-------+
我有一本字典,想从中映射值。
dicts = sc.parallelize([('india','ind'), ('usa','us'),('japan','jpn'),('uruguay','urg')])
我想要的输出是:
+-----+-------+--------+--------+
| col1| col2|col1_map|col2_map|
+-----+-------+--------+--------+
|india| japan| ind| jpn|
| usa|uruguay| us| urg|
+-----+-------+--------+--------+
我试过使用^{
def map_val(x):
return dicts.lookup(x)[0]
myfun = udf(lambda x: map_val(x), StringType())
df = df.withColumn('col1_map', myfun('col1')) # doesn't work
df = df.withColumn('col2_map', myfun('col2')) # doesn't work
我认为更简单的方法是使用简单的
dictionary
和df.withColumn
。udf方式
我建议您将元组列表更改为dict和broadcast在udf中使用
它应该给你
连接方式(比udf方式慢)
您所要做的就是将dicts rdd也更改为dataframe,并使用两个具有别名的join,如下所示
结果应该是一样的
相关问题 更多 >
编程相关推荐