【问题标题】:Not able to read json data using Spark [duplicate]无法使用 Spark 读取 json 数据 [重复]
【发布时间】:2018-07-15 00:51:32
【问题描述】:

我正在尝试使用Apache Spark 读取Json 数据。这是我到目前为止尝试过的代码:

val conf = new SparkConf()
      .setAppName("ExplodeDemo")
      .setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    import sqlContext.implicits._
val df = sqlContext.read.json("file location")
df.printSchema()

当我将文件名作为参数传递给sqlContext.read.json 时效果很好,但我的要求是直接传递文件的json String。

为此,我尝试过这样:

val rdd = sc.parallelize(Seq(r))
val df = sqlContext.read.json(rdd)
df.printSchema()

其中r 是我的json 字符串,通过使用此代码,没有编译错误。但是当我尝试 df.printSchema() 时,它显示如下,并且无法检索数据。

root
 |-- _corrupt_record: string (nullable = true)

【问题讨论】:

  • 您的 JSON 数据是什么样的? Spark 每行只能读取一个 JSON 对象(如果您将 multiline 设置为 true,则每个文件只能读取一个)
  • 这是一个有效的 json,我用 jsonlint.com 测试过
  • 我不是在问如何访问嵌套 json 的子实体,我是在问它如何打印 _corrupt_record 的模式?

标签: json hadoop apache-spark dataframe databricks


【解决方案1】:

好吧,您还需要提供架构。

DataFrame 只是一个带有 Schema 的 RDD。在使用 Datasoure API 时,Spark 将通过读取文件来推断架构。由于您没有使用 Datasoure APi 自动推断架构,因此您需要显式传递架构。

val YOURSCHEMA= StructType(Array(
  StructField("Attribute1", LongType, true),
  StructField("Attribute2", IntType, true)))
val df=spark.read.schema(YOURSCHEMA).json(rdd)
df.printSchema

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 2017-10-03
    • 2020-09-18
    • 2017-06-28
    • 2018-07-17
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多