【问题标题】:Unable To Read local JSON File using spark submit无法使用火花提交读取本地 JSON 文件
【发布时间】:2019-05-20 13:56:54
【问题描述】:

我正在使用 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 的一部分提供。需要帮助

【问题讨论】:

  • 我的 JSON 作为单行放在项目结构的资源文件夹中的文件中。有一个属性文件指向那个json文件的位置

标签: json scala apache-spark


【解决方案1】:

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 作为数据帧读取,您可能必须将字符串转换为 RDD,然后再转换为单个记录数据帧。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2019-10-25
    • 1970-01-01
    • 2016-04-15
    • 2021-03-16
    • 2021-10-28
    相关资源
    最近更新 更多