Scala-使用Spark将JSON文件作为单个字符串读取

Scala-使用Spark将JSON文件作为单个字符串读取,json,scala,apache-spark,apache-spark-sql,Json,Scala,Apache Spark,Apache Spark Sql,我有描述表结构的JSON文件。我希望将S3中的每个文件作为单个字符串读取,然后应用apache.spark.sql.types.DataType的fromJson方法 但目前,我只能将文件读入数据帧: val testJsonData = sqlContext.read.option("multiline", "true").json("/s3Bucket/metrics/metric1.json") 但我不需要df.schema,而是需要将JSON字符串的内容解析为StructType J

我有描述表结构的JSON文件。我希望将S3中的每个文件作为单个字符串读取,然后应用apache.spark.sql.types.DataType的fromJson方法

但目前,我只能将文件读入数据帧:

 val testJsonData = sqlContext.read.option("multiline", "true").json("/s3Bucket/metrics/metric1.json")
但我不需要df.schema,而是需要将JSON字符串的内容解析为StructType

JSON文件的内容:

{
  "type" : "struct",
  "fields" : [ {
    "name" : "metric_name",
    "type" : "string",
    "nullable" : true,
    "metadata" : { }
  }, {
    "name" : "metric_time",
    "type" : "long",
    "nullable" : true,
    "metadata" : { }
  }, {
    "name" : "metric_value",
    "type" : "string",
    "nullable" : true,
    "metadata" : { }
  }]
}

在本例中,您希望使用的是sc,它是SparkContext

这将产生一个RDD[String,String],其中._1是文件名,而._2是整个文件内容。也许你可以试试:

val files = sc.wholeTextFiles("/s3Bucket/metrics/", 16).toDS()
files.map(DataType.fromJson(_._2).asInstanceOf[StructType])
理论上,这将为您提供一个数据集[StructType]。不幸的是,我在pure spark sql API中找不到类似的函数,但这可能会起作用。

这可能会有所帮助
val files = sc.wholeTextFiles("/s3Bucket/metrics/", 16).toDS()
files.map(DataType.fromJson(_._2).asInstanceOf[StructType])