【问题标题】:How can I load data from a json file, containing array of arrays and not objects into a pyspark dataframe?如何从包含数组而不是对象的 json 文件将数据加载到 pyspark 数据框中?
【发布时间】:2021-06-28 03:18:43
【问题描述】:

我在查看https://stackoverflow.com/a/50969995 后尝试使用以下代码,但我了解到答案中的createDataFramespark.read.json 相比是不同的,并且不能以相同的方式使用。

import findspark
findspark.init('/home/myuser/softwareInstallations/spark-3.1.1-bin-hadoop2.7')
import pyspark

from pyspark.sql import SparkSession
from pyspark.sql.types import StructField, StructType, IntegerType, StringType, ArrayType, FloatType

spark = SparkSession.builder.appName('Basics').getOrCreate()
data_schema = StructType([StructField('col1', IntegerType(), False),
                StructField('col2', IntegerType(), False),
                StructField('col3', FloatType(), False)])

df1 = spark.read.json('myfile.json', schema=data_schema)
df1.printSchema()
df1.show()

我分享的答案链接演示了如何将 2 个长度数组的数组放入 df。我怎么能对文件中的数据做同样的事情。我的数据在myfile.json 中看起来像这样。

[
  [58808,2,0.103],
  [58807,2,0.77345],
  [58805,1,0.05],
  [58804,4,0.58475]
]

我是 python 和 pyspark 的新手,希望你不会把我缺乏理解误认为是懒惰 XD。

【问题讨论】:

    标签: python json apache-spark pyspark


    【解决方案1】:

    您的示例文件包含多行 JSON 字符串。在 Spark 中读取 JSON 时支持两个选项,您必须使用 option("multiline", "true")

    1. 单行模式 - 可拆分
    2. 多行模式 - 不可拆分
    from pyspark.sql import SparkSession
    
    spark = (
        SparkSession.builder.master("local[*]").getOrCreate()
    )
    multiline_df = spark.read.option("multiline", "true").json(
        "myfile.json"
    )
    multiline_df.printSchema()
    multiline_df.show()
    

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2021-12-20
      • 2021-12-31
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2019-03-15
      • 2022-10-22
      • 2021-07-16
      相关资源
      最近更新 更多