当前位置: 首页 > 知识库问答 >
问题:

将 JSON 文件读入 Spark DataFrame

汝天宇
2023-03-14

我正在尝试将 json 文件读入 Spark 数据帧,但我将整个文件作为一行和一列获取,我试图将其拆分为多列:

df = spark.read.json(sc.wholeTextFiles("HW2-DataSets/docs/output-0.json").values())
df.show()

这是我运行这行代码得到的输出:

+--------------------+
|              Images|
+--------------------+
|[[ricky4, 1634180...|
+--------------------+

这是已创建的数据帧的架构:

    root
 |-- Images: struct (nullable = true)
 |    |-- Z4ah9SemQjX2cKN187pX: struct (nullable = true)
 |    |    |-- artist: string (nullable = true)
 |    |    |-- created_at: long (nullable = true)
 |    |    |-- description: string (nullable = true)
 |    |    |-- download_url: string (nullable = true)
 |    |    |-- file_name: string (nullable = true)
 |    |    |-- id: string (nullable = true)
 |    |    |-- key_words: array (nullable = true)
 |    |    |    |-- element: string (containsNull = true)
 |    |    |-- source: string (nullable = true)
 |    |    |-- tagged: boolean (nullable = true)
 |    |    |-- title: string (nullable = true)
 |    |-- Z552dVXF5vp80bAajYrn: struct (nullable = true)
 |    |    |-- artist: string (nullable = true)
 |    |    |-- created_at: long (nullable = true)
 |    |    |-- description: string (nullable = true)
 |    |    |-- download_url: string (nullable = true)
 |    |    |-- file_name: string (nullable = true)
 |    |    |-- id: string (nullable = true)
 |    |    |-- key_words: array (nullable = true)
 |    |    |    |-- element: string (containsNull = true)
 |    |    |-- source: string (nullable = true)
 |    |    |-- tagged: boolean (nullable = true)
 |    |    |-- title: string (nullable = true)
 |    |-- Z598cIDb79GPrC6VXbTb: struct (nullable = true)
           ....

我的目标是将图像中的每个对象放在一行和分隔的列中,这意味着例如“Z4ah9SemQjX2cKN187pX”,其值为:艺术家,created_at…在第一行,“Z552dVXF5vp80bAajYrn”在第二行等。

我很陌生,可以激发每条评论都会有所帮助,谢谢。

使现代化

{
  "Images": {
    "Z4ah9SemQjX2cKN187pX": {
      "artist": "ricky4",
      "file_name": "mermaid_by_ricky4_d59jfzw-fullview.jpg",
      "created_at": 1634180503921,
      "description": "Hi folks! This is my latest work! So glad to be a part of the calendar project from my friend Dee  More details here! :thumb322291755: artistsforacure.deviantart.com… Inspired by: CLOCK DVA - Return to blue www.youtube.com/watch?v=rjfxI2…All resources: my own! Other purple artworks",
      "key_words": [
        "dark",
        "digital",
        "evil",
        "fantasy",
        "fishes",
        "lady",
        "light",
        "magic",
        "mermaid",
        "ocean",
        "sea",
        "utopia",
        "reflections"
      ],
      "source": "https://www.deviantart.com/",
      "title": "Mermaid",
      "tagged": false,
      "download_url": "",
      "id": "Z4ah9SemQjX2cKN187pX"
    },
    "Z552dVXF5vp80bAajYrn": {

共有1个答案

牛枫
2023-03-14

首先,您可以使用多行选项读取json文件,并将其作为数据帧变量中的单个列获取,然后可以使用columnname在数据帧变量上使用select语句。*它将为您提供一个包含一行的数据帧,其中每一行都有一个列,列的值与json中的值相同。

代码如下:

#read the json file
df = spark.read.option("multiline","true").json("HW2-DataSets/docs/output-0.json")
#used the select statement to see the output you want
from pyspark.sql.functions import *
df1 = df.select(col("Images.*"))
#do df1.show() to see the output
# I am using Databricks so I do display(df1)

#Convert Columns to rows (Updated)
from itertools import chain

m = create_map(list(chain(*(
        (lit(c), col(c)) for c in df1.columns))))

df2 = df1.withColumn('map', m)\
  .select(explode('map')).drop('map')

您可以看到如下输出:

 类似资料:
  • 问题内容: 我有这个JSON文件 这是通过Python json.dump方法获得的。现在,我想使用pyspark将此文件读入Spark中的DataFrame中。根据文档,我正在这样做 sc = SparkContext() sqlc = SQLContext(sc) df = sqlc.read.json(’my_file.json’) 打印df.show() print语句虽然说明了这一点:

  • 我想用GSON库用java读这个JSON文件。我刚开始使用gson Libray。有人请纠正我的代码我的JSON文件如下所示: 这是我为读取这个文件而编写的java代码: 但我得到以下异常:

  • 问题内容: 我想使用JSON简单库使用Java 读取此文件。 我的文件如下所示: 这是我为读取此文件而编写的Java代码: 但是我得到以下异常: 线程“主”中的异常java.lang.ClassCastException:org.json.simple.JSONArray无法转换为上的。 有人可以告诉我我做错了吗?整个文件是一个数组,并且文件的整个数组中包含对象和另一个数组(汽车)。但是我不知道如

  • 我想使用JSON简单库用java读取这个<code>JSON<code>文件。 我的文件如下所示: 这是我为读取此文件而编写的java代码: 但我得到了以下例外: 线程“main”中出现异常Java . lang . classcastexception:org . JSON . simple . JSON array无法转换为javaapplication1处的org.json.simple.J

  • 问题内容: 你如何将文件内容读入Java? 以下是文件内容: 只需将每个单词读入。 问题答案: 此Java代码读取每个单词并将其放入ArrayList中: 如果要逐行而不是逐字阅读,请使用和。

  • 问题内容: 我正在尝试将csv文件“ read_ex.csv”读入数组。我在web / stackoverflow上进行了无休止的搜索,以找到一种将文件读入数组的方法。我能做的最好的事情是以流方式读取它,但是由于文件大小可变,我无法将其存储在数组中。我相信ArrayList是处理可变大小数组的方法,但是我不知道如何使用它。本质上,我希望能够在while循环结束后访问String数组“ values