pyspark - (key, {key, value}) 记录中的字典键计数
问题描述
这是作业问题的一部分,也是一个简单的概念问题。我在 PySpark 中有键值记录,其中的值是各种大小的字典。
testRDD.collect() 返回
["2\t{'3': 1}",
"3\t{'2': 1}",
"4\t{'1': 1, '2': 1}",
"5\t{'4': 1, '2': 1, '6': 1}",
"6\t{'2': 1, '5': 1}",
"7\t{'2': 1, '5': 1}",
"8\t{'2': 1, '5': 1}",
"9\t{'2': 1, '5': 1}",
"10\t{'5': 1}",
"11\t{'5': 1}"]
我已经开始了
totalCount = dataRDD.map(lambda x: x.split("\t")) \
为了计算字典中不同键的数量,还有大约 3 行代码需要完成。键(键值)格式的提示(即我的 pyspark 代码的下一行)应该是我需要开始的全部内容。我试图在 flatMap 和 flatMapValues() [使用 lambda 函数] 中使用 .keys() ,但没有成功。对于 .keys(),我被告知我有一个列表,而不是字典。我明白为什么会这样,但我不知道如何处理这个问题。
在我的 pyspark 查询结束时,预期结果将是这个 testRDD 的简单计数 6。
我从类似的问题中看到列表理解可能是解决方案,但我仍然不太熟悉在 map() 中使用它?pyspark 中的 lambda 函数。
解决方案
rdd concepts like map, flatMap, distinct
对于这个问题,您需要使用python lambda, eval
以下步骤: -
让我们从创建 rdd 开始: -
my_rdd = sc.parallelize(["2\t{'3': 1}",
"3\t{'2': 1}",
"4\t{'1': 1, '2': 1}",
"5\t{'4': 1, '2': 1, '6': 1}",
"6\t{'2': 1, '5': 1}",
"7\t{'2': 1, '5': 1}",
"8\t{'2': 1, '5': 1}",
"9\t{'2': 1, '5': 1}",
"10\t{'5': 1}",
"11\t{'5': 1}"
])
my_rdd.collect()
["2\t{'3': 1}",
"3\t{'2': 1}",
"4\t{'1': 1, '2': 1}",
"5\t{'4': 1, '2': 1, '6': 1}",
"6\t{'2': 1, '5': 1}",
"7\t{'2': 1, '5': 1}",
"8\t{'2': 1, '5': 1}",
"9\t{'2': 1, '5': 1}",
"10\t{'5': 1}",
"11\t{'5': 1}"]
\t
然后用和eval
dict分割:-
new_my_rdd = my_rdd.map(lambda x:eval(x.split("\t")[1]))
new_my_rdd.collect()
[{'3': 1},
{'2': 1},
{'1': 1, '2': 1},
{'2': 1, '4': 1, '6': 1},
{'2': 1, '5': 1},
{'2': 1, '5': 1},
{'2': 1, '5': 1},
{'2': 1, '5': 1},
{'5': 1},
{'5': 1}]
现在仅提取键并用于flatMap
将它们转换为行:-
new_my_rdd2 = new_my_rdd.flatMap(lambda x:x.keys())
new_my_rdd2.collect()
['3',
'2',
'1',
'2',
'2',
'4',
'6',
'2',
'5',
'2',
'5',
'2',
'5',
'2',
'5',
'5',
'5']
最后,计算不同的值:-
new_my_rdd2.distinct().count()
6
推荐阅读
- vba - VBa 中不含剂量
- reactjs - 如何将整个 React 文件夹推送到 github?
- javascript - D3.js:具有两级嵌套数据的多线图表的圆圈未正确更新
- kubernetes - signerName 已经在 yaml 文件中,但仍然缺少 signerName 错误
- python - Python中的高效求和
- google-kubernetes-engine - Mongodb Atlas VPC 对等网络未连接到 GCP VPC
- amazon-web-services - 如何删除 AWS 放大中满足特定条件的所有项目?
- flutter - 如何禁用或暂停颤动弹簧动画
- javascript - 单击复选框后按钮未启用
- c - C中的自定义连接