Python 计算Pyspark中特定密钥的数目

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,每一行都是一个包含以下内容的列表:

[{"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键的出现次数,而不是它的值的总和。啊,好吧,我误解了你的问题。请参阅编辑后的答案,我应该为您做这件事。