如何使用Spark和Spray Json读取json文件并将其转换为case类

phy

我有一个包含json行的文本文件,其结构如下所示。

{"city": "London","street": null, "place": "Pizzaria", "foo": "Bar"}

我需要使用spark以JSON格式读取它,并使用以下scala代码将其转换为case类。我只需要json的case类中给出的已定义字段。

 import org.apache.spark.sql.SparkSession
 import spray.json.DefaultJsonProtocol
 import spray.json._


object SimpleExample extends DefaultJsonProtocol {

  case class Row(city: String,
                 street: Option[String],
                 place: String)

  implicit val rowFormat = jsonFormat3(Row)

  def main(args: Array[String]): Unit = {

    val logFile = "example.txt"
    val spark = SparkSession.builder.appName("Simple Application").getOrCreate()
    val logData = spark.read.textFile(logFile).cache()

    import spark.implicits._

    val parsed = logData.map(line => line.parseJson.convertTo[Row])

    println(s"Total Count : ${parsed.count()}")

    spark.stop()
  }
}

但是,当我运行我的spark应用程序时,出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: spray/json/JsonFormat
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:42)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:879)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: spray.json.JsonFormat
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我猜错误是关于进口的,但无法解决。

ido堂

您可以将数据直接读取为json(不使用spray-json),然后将其转换为数据集。

import spark.implicits._

val logData = spark.read.json(logFile)
logData.select("city", "street", "place").as[Row]

只要case类中的变量名与文件中的变量名匹配,它就可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何读取Json文件并将其转换为数据框

如何从数据库(SQL)读取Json并将其转换为Java类?

如何读取json文件,并使用GSON将其转换为POJO

ASP.Net Core c#使用Microsoft Graph导入JSON文件并将其转换为类

如何转换JSON文件并将其转换为CSV并使用数据框保持标题

如何在spark中直接流(kafka)JSON文件并将其转换为RDD?

如何将我的输出转换为 .JSON 并将其另存为 .json 文件

如何加载JSON文件并将其转换为特定类型的对象?

如何在Anypoint Studio中导入CSV文件并将其转换为JSON格式?

如何修改数组并将其转换为 JSON

如何从JSON获取数组并将其转换为foreach

如何从URL获取数据并将其转换为json?

如何获取列表中的项目并将其转换为json

如何解析JSON并将其值转换为Array?

如何从JSON提取特定部分并将其转换为CSV

如何在Node.js中读取文件内容并将数据转换为JSON?

如何从文件中读取数据,然后将数据转换为int并将其存储在向量中

如何从文件中读取原始PCM数据并将其转换为float?

如何读取xml文件并将其转换为python代码并运行?

逐行读取文本文件并将其仅使用read()转换为列表?

如何获取二进制文件,读取它,将其转换为可用数据并将其存储到ArrayList中

重构代码并承诺读取文件并将其转换为json

如何选择 JSON 的特定部分并将其转换为列表以使用 Moshi 进行改造

如何读取xml数据并将其转换为数组

使用 Python 读取 XLS 并将其转换为 CSV

如何使用坐标读取json文件并将其绘制在地图中?

如何使用Python读取txt文件中的数据块并将其转换为结构化数据?

如何使用os.walk在keras中读取文本文件并将其转换为批处理数据集

如何读取复杂的.txt文件并转换为JSON