我想要以未解析的Json格式读取Json文件,而不使用数据框架。我只想将其作为常规文件读取,格式仍然保持完整。有什么想法吗?我尝试使用wholtextfile进行阅读,但这会创建一个数据框架。
如果你不接受Spark特定的答案,也许你可以尝试普通的Scala解决方案,比如使用spray-json库:
import spray.json._
val source = scala.io.Source.fromFile("yourFile.txt")
val lines = try source.mkString finally source.close()
val yourJson = lines.parseJson
upickle库是最简单的“纯Scala”读取JSON文件的方式:
val jsonString = os.read(os.pwd/"src"/"test"/"resources"/"phil.json")
val data = ujson.read(jsonString)
data.value // LinkedHashMap("first_name" -> Str("Phil"), "last_name" -> Str("Hellmuth"), "birth_year" -> Num(1964.0))
更多详情请参阅此帖子。
上面的代码片段使用os-lib从磁盘读取文件。如果您在集群环境中运行代码,则可能需要使用不同的库。这取决于文件所在位置和您的环境。
避免使用其他Scala JSON库,因为它们很难使用。
RDD [String]
,这是最常见的文本风格分布式数据结构类型。// Where sc is your spark context
> val textFile = sc.textFile("myFile.json")
textFile: org.apache.spark.rdd.RDD[String]
spark.read.json()
这样的选项会将其放入数据框中,而我认为您希望避免这种情况。请注意,这是使用 SparkSessions API。 - Tresdonmy_file.json
的 json 文件名还是一个 JSON 格式化的字符串 {key: value, key1: value}
。我猜想后者是因为前者只需要指定文件名就行了。如果是后者,你可以尝试像这样获取结果import scala.io.Source val fileContents: String = Source.fromFile(filename).getLines.mkString
- Tresdon