Scala读取Json文件作为Json。

4
我想要以未解析的Json格式读取Json文件,而不使用数据框架。我只想将其作为常规文件读取,格式仍然保持完整。有什么想法吗?我尝试使用wholtextfile进行阅读,但这会创建一个数据框架。

1
可能是在Scala中读取整个文件?的重复问题。 - Harald Gliebe
3个回答

3

如果你不接受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

1

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库,因为它们很难使用。


我在Intellij中使用它。但是我遇到错误“not found: value os”; 我重新加载了Intellij; 但错误仍然存在。请您看一下这个问题:https://dev59.com/GdX8oIgBc1ULPQZFAQ8b。谢谢。 - M_Gh

0
我注意到您指定了apache-spark标签,如果您想要普通的scala,那么这个答案将不适用。使用此代码,您可以获得一个RDD [String],这是最常见的文本风格分布式数据结构类型。
// Where sc is your spark context

> val textFile = sc.textFile("myFile.json")
textFile: org.apache.spark.rdd.RDD[String]

但是RDD是Json格式吗?我需要以Json格式读取。 - RData
我有点困惑被问到了什么 - 这将把它读取为一个普通字符串(不进行解析)。否则,像 spark.read.json() 这样的选项会将其放入数据框中,而我认为您希望避免这种情况。请注意,这是使用 SparkSessions API。 - Tresdon
我需要Json文件提交给另一个期望Json输入的进程,无需解析。 - RData
它是期望一个像 my_file.json 的 json 文件名还是一个 JSON 格式化的字符串 {key: value, key1: value}。我猜想后者是因为前者只需要指定文件名就行了。如果是后者,你可以尝试像这样获取结果import scala.io.Source val fileContents: String = Source.fromFile(filename).getLines.mkString - Tresdon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接