您的JSON不平坦,因此需要使用限定名称(例如)来对顶级以下的字段进行寻址dateCreated.$date
。您的特定日期字段都是long
类型,因此您需要对它们进行数值比较,看起来您在正确的位置上。
另一个问题是您的字段名称包含“ $”字符,并且Spark sql不允许您对其进行查询。一种解决方案是,SchemaRDD
首先将它读为,而不是直接将JSON读为,而是RDD[String]
使用map
方法执行您选择的Scala字符串操作,然后使用sqlContext
的jsonRDD
方法创建SchemaRDD
。
val lines = sc.textFile(...)
// you may want something less naive than global replacement of all "$" chars
val linesFixed = lines.map(s => s.replaceAllLiterally("$", ""))
val accEvt = sqlContext.jsonRDD(linesFixed)
我已经使用Spark 1.1.0测试了这一点。
作为参考,此错误报告及其他报告中已指出Spark sql中缺乏报价功能,并且似乎该修复程序已在最近签入,但要花一些时间才能发布到版本中