0
我已经用以下结构存储在一个JSON格式我的数据存储在JSON星火值列表的统计特性:获取
{"generationId":1,"values":[-36.0431,-35.913,...,36.0951]}
我想要得到的间距分布之间(不同连续数字)在文件平均值(generationIds)之间。
在我zepplein笔记本电脑上的第一行是:
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,以后。我想将这个分布和一个已知的函数(模拟vs理论)一起绘制出来。
这很酷,感谢这篇技巧,我已经学到了一些东西。尽管我没有看到,我怎么能走得更远,并得到我想要的分布,因为现在间距可以通过采取行[2] - 行[1],行[3] - 行[2]等来提取...,这在SQL中并不方便。 – bayerb
我不是SQL专家,所以我会使用Scala REPL来创建一个函数,该函数需要一个值的集合并返回一个具有相邻值之间差异的新集合。然后,我会看到如何将该逻辑合并到我在Spark中的DataFrame转换中。基于我自己的经验,基本上是一种纯粹的程序化方法。 – Vidya
忘记'explode'。虽然在大多数情况下都很有帮助,但我提供了一个更简单的解决方案。 – Vidya