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