python - 在 pyspark 中使用字典的快速方法
问题描述
我有一个关于 pyspark 的问题。
我有两列“国家”和“网络”的数据框。我需要将此数据框保存为字典,以便稍后遍历另一个数据框列。
我正在像这样保存字典:
sorted_dict = result.rdd.sortByKey()
但是当我试图遍历它时,我有一个例外:
“您似乎正在尝试广播 RDD 或从“异常”中引用 RDD:您似乎正在尝试广播 RDD 或从动作或转换中引用 RDD。RDD 转换和操作只能由驱动程序调用,不能在其他转换内部调用;例如 SPARK-5063
我明白我不能同时使用两个RDD,但不幸的是我不知道如何以这种方式使用SparkContext.broadcast,因为我有一个错误
类型错误:广播()缺少 2 个必需的位置参数:“自我”和“价值”
任何人都可以帮我弄清楚吗?我需要从数据框制作字典:
+--------------------+-------+
| web|country|
+--------------------+-------+
| alsudanalyoum.com| SD|
|periodicoequilibr...| SV|
| telesurenglish.net| UK|
| nytimes.com| US|
|portaldenoticias....| AR|
+----------------------------+
然后取另一个数据框:
+--------------------+-------+
| split_url|country|
+--------------------+-------+
| alsudanalyoum.com| Null|
|periodicoequilibr...| Null|
| telesurenglish.net| Null|
| nytimes.com| Null|
|portaldenoticias....| Null|
+----------------------------+
...并将字典的值放入国家列。
由于其他原因,PS join 不适合我。
解决方案
如果可以,则应使用join()
,但既然不能,则可以结合使用df.rdd.collectAsMap()
andpyspark.sql.functions.create_map()
来itertools.chain
实现相同的目的。
注意:sortByKey()
不返回字典(或地图),而是返回 sorted RDD
。
from itertools import chain
import pyspark.sql.functions as f
df = spark.createDataFrame([
("a", 5),
("b", 20),
("c", 10),
("d", 1),
], ["key", "value"])
# create map from the origin df
rdd_map = df.rdd.collectAsMap()
# yes, these are not real null values, but here it doesn't matter
df_target = spark.createDataFrame([
("a", "NULL"),
("b", "NULL"),
("c", "NULL"),
("d", "NULL"),
], ["key", "value"])
df_target.show()
+---+-----+
|key|value|
+---+-----+
| a| NULL|
| b| NULL|
| c| NULL|
| d| NULL|
+---+-----+
value_map = f.create_map(
[f.lit(x) for x in chain(*rdd_map.items())]
)
# map over the "key" column into the "value" column
df_target.withColumn(
"value",
value_map[f.col("key")]
).show()
+---+-----+
|key|value|
+---+-----+
| a| 5|
| b| 20|
| c| 10|
| d| 1|
+---+-----+
推荐阅读
- installshield - 如何修复 InstallShield 向导错误 -5011:0x8000ffff?
- stack - 如何检查 Maxima 中的输入字段是否为空?
- kubernetes - kubeadm init:clusterDND IP 的推荐值
- pointers - 为什么 Go 标准库更喜欢指针接收器?
- windows - 获取当前路径的一部分
- powershell - 有没有办法使用 Powershell 在浏览器中打开具有指定 cookie 的网站?
- wpf - 如何确定 WPF 中 RelativeSource 的 AncestorLevel?
- wordpress - 无限循环 Wordpress 301 重定向 AWS CloudFront 负载均衡器和 LightSail
- android - 无法在线性布局中插入按钮
- ruby - 返回参数的名称而不是其值 - Ruby