【问题标题】:Count key value that matches certain value in pyspark dataframe计算与pyspark数据框中特定值匹配的键值
【发布时间】:2021-03-22 05:56:40
【问题描述】:

我有一个 pyspark 数据框,其中有一列值为字符串 json。如何计算字典内列表中与特定值匹配的值并将其作为列报告?

例如,下面是数据框:

+---------------------------------------------------------------------------+
|col                                                                        |
+---------------------------------------------------------------------------+
|{"field":{"list":[{"item":1,"upgrade":false},{"item":2,"upgrade":true}]}}
+----------------------------------------------------------------------------+
|{"field":{"list":[{"item":1,"upgrade":false},{"item":2,"upgrade":false}]}}
+--------------------------------------------------------------------------+

我想计算列表中有多少“升级”键是假的。

所以理想的数据框应该是这样的:

+---------------------------------------------------------------------------+----------------+
|col                                                                        | upgrade_false
+---------------------------------------------------------------------------+-----------------+
|{"field":{"list":[{"item":1,"upgrade":false},{"item":2,"upgrade":true}]}}   | 1
+----------------------------------------------------------------------------+----------------+
|{"field":{"list":[{"item":1,"upgrade":false},{"item":2,"upgrade":false}]}}  | 2
+----------------------------------------------------------------------------+-----------------+

提前致谢。

【问题讨论】:

  • 列是字符串吗? Spark 没有字典类型。
  • @mck 是的,它是字符串。很抱歉造成混乱

标签: python json apache-spark pyspark apache-spark-sql


【解决方案1】:

最简单的方法可能是计算"upgrade":false 出现的次数。那么我们根本不需要解析json:

import pyspark.sql.functions as F

df2 = df.withColumn('upgrade_false', F.size(F.split('col', '"upgrade":false')) - 1)
df2.show()
+--------------------+-------------+
|                 col|upgrade_false|
+--------------------+-------------+
|{"field":{"list":...|            1|
|{"field":{"list":...|            2|
+--------------------+-------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 2021-02-12
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多