我的代码如下
val sparkConf = new SparkConf().setAppName("Json Test").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val path = "/path/log.json"
val df = sqlContext.read.json(path)
df.show()
示例json数据
{ “IFAM”: “EQR”, “KTM”:1430006400000 “COL”:21, “DATA”:[{ “MLrate”: “30”, “Nrout”: “0”, “上”: null,“Crate”:“2”},{“MLrate”:“31”,“Nrout”:“0”,“up”:null,“Crate”:“2”},{“MLrate”:“30 “ ”Nrout“: ”5“, ”上“:NULL, ”板条箱“: ”2“},{ ”MLrate“: ”34“, ”Nrout“: ”0“, ”上“:NULL,” 板条箱“:” 4 “},{” MLrate “:” 33" , “Nrout”: “0”, “上”:NULL, “板条箱”: “2”},{ “MLrate”: “30”,“Nrout “:” 8" , “上”:NULL, “板条箱”: “2”}]}
在scala ide发生错误时,我无法理解:
INFO SharedState:仓库路径是 '文件:/ C:/用户/ ben53 /工作区/演示/火花仓库/'。例外 线程“main”java.util.ServiceConfigurationError: org.apache.spark.sql.sources.DataSourceRegister:Provider org.apache.spark.sql.hive.orc.DefaultSource无法实例化 在java.util.ServiceLoader.fail(未知来源)at java.util.ServiceLoader.access $ 100(未知来源)at java.util.ServiceLoader $ LazyIterator.nextService(未知来源)at java.util.ServiceLoader $ LazyIterator.next(未知来源)at java.util.ServiceLoader $ 1.next(未知来源)at scala.collection.convert.Wrappers $ JIteratorWrapper.next(Wrappers.scala:43) 在scala.collection.Iterator $ class.foreach(Iterator.scala:893)at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)at scala.collection.IterableLike $ class.foreach(IterableLike.scala:72)at scala.collection.AbstractIterable.foreach(Iterable.scala:54)at scala.collection.TraversableLike $ class.filterImpl(TraversableLike.scala:247) 在 scala.collection.TraversableLike $ class.filter(TraversableLike.scala:259) 在scala.collection.AbstractTraversable.filter(Traversable.scala:104) 在 org.apache.spark.sql.execution.datasources.DataSource $ .lookupDataSource(DataSource.scala:575) 在 org.apache.spark.sql.execution.datasources.DataSource.providingClass $ lzycompute(DataSource.scala:86) 在 org.apache.spark.sql.execution.datasources.DataSource.providingClass(DataSource.scala:86) 在 org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:325) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152) 在 org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:298) 在 org.apache.spark.sql.DataFrameReader.json(DataFrameReader.scala:251) 在com.dataflair.spark.QueryLog $ .main(QueryLog.scala:27)at com.dataflair.spark.QueryLog.main(QueryLog.scala)引起: java.lang.VerifyError:错误的返回类型异常详细信息:位置: 组织/阿帕奇/火花/ SQL /蜂巢/兽人/ DefaultSource.createRelation(Lorg /阿帕奇/火花/ SQL / SQLContext; [Ljava /郎/字符串; Lscala /尺码; Lscala /尺码; Lscala /收集/不可改变/地图;) Lorg /阿帕奇/火花/ SQL /来源/ HadoopFsRelation; @ 35:areturn原因: 输入'org / apache / spark / sql / hive / orc / OrcRelation'(当前帧,堆栈[0])不能分配给 'org / apache / spark / sql / sources / HadoopFsRelation'(来自方法 签名)当前框架: bci:@ 35 旗帜:{} locals:{'org / apache / spark / sql / hive / orc / DefaultSource','org / apache / spark / sql / SQLContext','[Ljava / lang / String;', 'scala / Option','scala / Option','scala / collection / immutable / Map'} stack:{'org / apache / spark / sql / hive / orc / OrcRelation'}字节码: 0x0000000:b200 1c2b c100 1ebb 000e 592a b700 22b6 0x0000010:0026 bb00 2859 2c2d b200 2d19 0419 052b 0x0000020:b700 30b0
at java.lang.Class.getDeclaredConstructors0(Native Method)at java.lang.Class.privateGetDeclaredConstructors(未知来源)at java.lang.Class.getConstructor0(未知来源)at java.lang.Class.newInstance(Unknown Source)... 20多个
答案 0 :(得分:1)
路径应该是正确的。但是提供的JSON无效。请更正示例JSON,然后尝试。 您可以在https://jsonlint.com/
上验证JSON它显示了JSON的无效部分。
虽然我尝试了样本并获得了如下输出:
+---+--------------------+----+-------------+
|COL| DATA|IFAM| KTM|
+---+--------------------+----+-------------+
| 21|[[2,30,0,null], [...| EQR|1430006400000|
+---+--------------------+----+-------------+
使用的代码如下:
object Test {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("Json Test").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val path = "/home/test/Desktop/test.json"
val df = sqlContext.read.json(path)
df.show()
}
}
答案 1 :(得分:0)
我很确定你的道路不对。检查文件是否存在于指定的路径中。 Json是有效的。