在Spark集群中使用json4s-native库

时间:2016-06-13 13:31:37

标签: json scala apache-spark json4s

我正在尝试处理AWS EMR Spark群集中的数据。为此,我有一个Scala应用程序从S3读取原始JSON数据,使用Scala的本机 scala.util.parsing.json.JSON 库将其解析为Map [String,Any]和 parseFull 方法。

然后我有一个递归函数,它使嵌套的JSON变平(所以Map [String,Any]里面不包含任何Maps)然后我想把它转换回JSON格式的字符串来创建一个Spark DataFrame对象

为了将Map对象解析为JSON字符串,我找到了mohit的this解决方案。

不幸的是,我的IntelliJ中的org.json4s.native库存在一些问题,它说它无法解决这种依赖关系。 (事后看来,我现在知道在使用正确的依赖项更新.sbt文件后没有刷新项目的问题。现在在IntelliJ中json4s.native库及其功能正常工作。)

首先,我使用了org.json4s.jackson.Json。但那么

Json(DefaultFormats).write(m)

行产生一个字符串,其中整数转换为双精度,这是不正确的。

然后我让我的IntelliJ使用json4s.native库并且结果转换成数字正确。

但是,现在,我在Spark群集中使用此库时遇到问题。如果我在本地构建.jar,将文件上传到S3,将其复制到EMR集群,然后使用spark-submit运行它,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json4s/native/Json$

当我尝试从spark-shell导入这个库时,我只是得到了这个依赖性无法解决的响应。

我试图通过尝试手动将json4s-native jar文件放到群集中来尝试Eli Leszczynski的this建议,但他建议的 / home / hadoop / lib 不能用作/当我登录hadoop@blabla.compute.amazonaws.com时,home / hadoop是一个基本上空的文件夹。

我发现我的库可以在 / usr / lib / usr / lib / hadoop / lib 文件夹中找到,但我在那里复制了jar文件但仍然我自己的剧本失败了。

那么,如何在我的Amazon EMR Spark群集中使用 org.json4s.native 库?

(Spark版本1.6和我使用Scala版本2.10.5,因为它与Spark版本兼容)

0 个答案:

没有答案