无法使用Spark Submit读取本地JSON文件

时间:2019-05-19 17:59:00

标签: json scala apache-spark

我正在使用

在scala spark中读取JSON文件
  

val df = spark.read.json(properties.getProperty(“ jsonFilePath”))

当我从IDE(Intellij)运行时,此代码有效 但是当我尝试使用spark-submit命令执行时,它会显示以下消息

INFO FileScanRDD: Reading File path: file:///Users/path/to/json/file.json, range: 0-8822, partition values: [empty row]

由于这个原因,我无法处理JSON数据。知道这里会发生什么吗?

这是我的spark提交命令:

${SPARK_HOME_DIR}/bin/spark-submit --master local ${SCALA_JAR_LOC}/<JARNAME>.jar

我也尝试使用--files选项将其作为spark-submit的一部分提供。需要帮助

1 个答案:

答案 0 :(得分:0)

spark.read.json支持从Hadoop支持的文件系统读取数据。如果JSON是包含您的jar的jar的一部分,则可以使用getClass.getResourceAsStream Java API从作业的类路径读取json。

要从您的类路径读取JSON文件

def read(file: String): String = {
  val stream = getClass.getResourceAsStream(s"/$file")
  scala.io.Source.fromInputStream(stream)
    .getLines
    .toList
    .mkString(" ")
    .trim
    .replaceAll("\\s+", " ")
}

由于要在代码中将JSON作为数据帧读取,因此可能必须将String转换为RDD,然后转换为单个记录数据帧。

val inputAsRDD = sparkCtxt.parallelize(List(read("/path/within/resources/folder")))
val df = sparkSession.read.json(inputAsRDD)