【问题标题】:Get statistical properties of a list of values stored in JSON with Spark使用 Spark 获取存储在 JSON 中的值列表的统计属性
【发布时间】:2017-09-04 12:29:04
【问题描述】:

我使用以下结构以 JSON 格式存储我的数据:

{"generationId":1,"values":[-36.0431,-35.913,...,36.0951]}

我想获取文件(generationIds)平均值之间的间距分布(连续数字之间的差异)。

我的 zepplein notebook 的第一行是:

import org.apache.spark.sql.SparkSession
val warehouseLocation = "/user/hive/warehouse"
val spark = SparkSession.builder().appName("test").config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate()
val jsonData = spark.read.json("/user/hive/warehouse/results/*.json")
jsonData.createOrReplaceTempView("results")

我现在才意识到,这不是一个好主意。上述 JSON 中的数据现在如下所示:

val gen_1 = spark.sql("SELECT * FROM eig where generationId = 1")
gen_1.show()
+------------+--------------------+
|generationId|              values|
+------------+--------------------+
|           1|[-36.0431, -35.91...|
+------------+--------------------+

所有值都在同一个字段中。

您知道如何以不同的方式解决这个问题吗?它不一定是 Hive。任何 Spark 相关的解决方案都可以。

值的数量可以是 ~10000,甚至更高。我想将此分布与已知函数(模拟与理论)一起绘制。

【问题讨论】:

    标签: hadoop apache-spark hive apache-zeppelin


    【解决方案1】:

    这个递归函数,不是非常优雅,当然也没有经过实战考验,可以计算差异(假设一个偶数大小的集合):

    def differences(l: Seq[Double]): Seq[Double] = {
        if (l.size < 2) {
          Seq.empty[Double]
        } else {
          val values = l.take(2)
          Seq(Math.abs(values.head - values(1))) ++ differences(l.tail)
        }
    }
    

    给定这样一个函数,你可以像这样在 Spark 中应用它:

    jsonData.map(r => (r.getLong(0), differences(r.getSeq[Double](1))))
    

    【讨论】:

    • 这很酷,谢谢你的提示,我已经学到了一些东西。虽然我没有看到,但我怎样才能走得更远,得到我想要的分布,因为现在可以通过行 [2] - 行 [1]、行 [3] - 行 [2] 等来提取间距...,这在 SQL 中不太方便。
    • 我不是你的 SQL 专家,所以我会使用 Scala REPL 提出一个函数,该函数接受一组值并返回一个包含相邻值之间差异的新集合。然后我会看看如何将该逻辑合并到我在 Spark 中的DataFrame 转换中。因此,根据我自己的经验,基本上是一种纯粹的程序化方法。
    • 忘记explode。虽然在大多数此类情况下都有帮助,但我提供了一个可能更简单的解决方案。
    • 很高兴为您提供帮助。祝你的项目好运!
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多