Python 计算Pyspark中特定密钥的数目
假设我有一列a,每一行都是一个包含以下内容的列表:Python 计算Pyspark中特定密钥的数目,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,假设我有一列a,每一行都是一个包含以下内容的列表: [{"a":"1", "b":"2", "c":"3"}, {"a":"2", "b":"5", "c":"7"}] 如何计算“a”s的数量 我想要一个类似F.map()的解决方案 非常感谢编辑答案: 根据
[{"a":"1", "b":"2", "c":"3"}, {"a":"2", "b":"5", "c":"7"}]
如何计算“a”
s的数量
我想要一个类似F.map()
的解决方案
非常感谢编辑答案: 根据OP的注释进行调整。要获取字典列表中某个特定键的出现情况,您仍然可以使用列表理解(进行一些调整): 输出:
2
3
我们基本上使用相同的逻辑,只是在本例中我们使用嵌套列表理解x
首先遍历A(字典),而y
遍历x(特别是每个字典中的键)。最后,我们使用if
条件来确保键与指定的值匹配
旧答案: 不确定这是否提供了类似“映射”的解决方案,但您可以使用列表理解,这非常简单:
A = [{"a":"1", "b":"2", "c":"3"}, {"a":"2", "b":"5", "c":"7"}]
A_sum = sum([int(x['a']) for x in A])
print(A_sum)
输出:
2
3
说明:
本质上,我们是基于给定的键“a”收集字典值,将该值解析为字符串,然后使用
sum
将所有结果值添加到该列表中。一些很好的参考资料已经打开。您可以使用udf来实现这一点,假设您提到的每一行都是一个字典列表-
import pyspark
from pyspark.sql import SQLContext
import pyspark.sql.functions as F
from functools import partial
temp_df = spark.createDataFrame(
[
[[{"a":"1", "b":"2", "c":"3"}, {"a":"2", "b":"5", "c":"7"}]],
[[{"a":"10", "b":"2", "c":"3"}, {"a":"20", "b":"5", "c":"7"}]],
[[{"a":"10", "b":"2", "c":"3"}, {"a":"20", "b":"5", "c":"7"}]],
],
["A"]
)
def key_occurence(inp,key=None):
res = 0
for d in inp:
if key in d:
res += 1
return res
partial_func = partial(key_occurence, key="a")
key_occurence_udf = F.udf(partial_func,"int")
temp_df = temp_df.withColumn("A_occurence",key_occurence_udf("A"))
temp_df.show()
+--------------------+-----------+
| A|A_occurence|
+--------------------+-----------+
|[[a -> 1, b -> 2,...| 2|
|[[a -> 10, b -> 2...| 2|
|[[a -> 10, b -> 2...| 2|
+--------------------+-----------+
udf还引入了一个参数来检查相应的键,感谢您的帮助。但我认为输出应该是2。这是因为我想计算a键的出现次数,而不是它的值的总和。啊,好吧,我误解了你的问题。请参阅编辑后的答案,我应该为您做这件事。