相关疑难解决方法(0)

在 pyspark 中读取嵌套的 JSON 文件

我想从 hdfs 中的 json 文件创建一个 pyspark 数据框。

json 文件具有以下内容:

{“产品”:{“0”:“台式电脑”,“1”:“平板电脑”,“2”:“iPhone”,“3”:“笔记本电脑”},“价格”:{“0”:700 , "1": 250, "2": 800, "3": 1200 } }

然后,我使用 pyspark 2.4.4 读取此文件 df = spark.read.json("/path/file.json")

所以,我得到这样的结果:

df.show(truncate=False)
+---------------------+---------------------------------+
|Price                |Product                          |
+---------------------+---------------------------------+
|[700, 250, 800, 1200]|[Desktop, Tablet, Iphone, Laptop]|
+---------------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

但我想要一个具有以下结构的数据框:

+-------+--------+
|Price  |Product |
+-------+--------+
|700    |Desktop | 
|250    |Tablet  |
|800    |Iphone  |
|1200   |Laptop  |
+-------+--------+
Run Code Online (Sandbox Code Playgroud)

如何使用 pyspark 获取具有先前结构的数据框?

我尝试使用爆炸,df.select(explode("Price"))但出现以下错误:

---------------------------------------------------------------------------
Py4JJavaError                             Traceback (most recent call last)
/usr/lib/spark/python/pyspark/sql/utils.py in deco(*a, **kw)
     62         try:
---> …
Run Code Online (Sandbox Code Playgroud)

json pyspark

5
推荐指数
1
解决办法
2万
查看次数

Spark 使用纯 SQL 查询提取嵌套 JSON 数组项

注意:这不是以下内容的重复(或其他几个类似的讨论)


我有一个Hive表,我必须纯粹通过Spark-SQL-query读取和处理。该表有一个string-type 列,其中包含JSON来自 API 的转储;因此,正如预期的那样,它具有深度嵌套的字符串化 JSON

让我们看这个例子(它描述了我正在尝试处理的数据的确切深度/复杂性)

{
    "key1": ..
    "key2": ..
    ..
    "bill_summary": {
        "key1": ..
        "key2": ..
        ..
        "items": [
            {
                "item": {
                    "key1": ..
                    "key2": ..
                    ..
                    "type": "item_type_1"
                    ..
                    "total_cost": 57.65
                    ..
                }
            },
            {
                "item": {
                    "key1": ..
                    "key2": ..
                    ..
                    "total_cost": 23.31
                    ..
                }
            }
            ..
            { …
Run Code Online (Sandbox Code Playgroud)

apache-spark-sql

5
推荐指数
1
解决办法
1万
查看次数

Spark中的嵌套JSON

我将以下JSON作为DataFrame加载:

root
 |-- data: struct (nullable = true)
 |    |-- field1: string (nullable = true)
 |    |-- field2: string (nullable = true)
 |-- moreData: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- more1: string (nullable = true)
 |    |    |-- more2: string (nullable = true)
 |    |    |-- more3: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

我想从这个DataFrame中获取以下RDD:

RDD[(more1, more2, more3, field1, field2)]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我想我必须使用flatMap嵌套的JSON?

scala dataframe apache-spark apache-spark-sql

4
推荐指数
1
解决办法
3695
查看次数

数组中第n项的SparkSQL sql语法

我有一个json对象,它有一个不幸的嵌套和数组组合.所以用spark sql查询它并不是很明显.

这是一个示例对象:

{
  stuff: [
    {a:1,b:2,c:3}
  ]
}
Run Code Online (Sandbox Code Playgroud)

所以,在javascript中,为了获得价值c,我会写myData.stuff[0].c

在我的spark sql查询中,如果该数组不存在,我将能够使用点表示法:

SELECT stuff.c FROM blah
Run Code Online (Sandbox Code Playgroud)

但我不能,因为最里面的对象被包裹在一个数组中.

我试过了:

SELECT stuff.0.c FROM blah // FAIL
SELECT stuff.[0].c FROM blah // FAIL
Run Code Online (Sandbox Code Playgroud)

那么,选择这些数据的神奇方法是什么?或者甚至支持了吗?

python apache-spark apache-spark-sql pyspark

4
推荐指数
1
解决办法
9229
查看次数

将具有结构数组的列扩展为新列

我有一个带有单列的 DataFrame,它是一个结构数组

df.printSchema()
root
 |-- dataCells: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- label: string (nullable = true)
 |    |    |-- value: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

一些示例数据可能如下所示:

df.first()
Row(dataCells=[Row(label="firstName", value="John"), Row(label="lastName", value="Doe"), Row(label="Date", value="1/29/2018")])
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何通过将每个结构转换为命名列来重新格式化此 DataFrame。我想要一个像这样的数据框:

------------------------------------
| firstName | lastName | Date      |
------------------------------------
| John      | Doe      | 1/29/2018 |
| ....      | ...      | ...       |
Run Code Online (Sandbox Code Playgroud)

我已经尝试了我能想到的一切,但还没有弄清楚。

apache-spark pyspark

4
推荐指数
1
解决办法
5166
查看次数