【发布时间】:2014-10-27 11:04:17
【问题描述】:
下面的代码应该:
- 遍历字符串序列
- 将每一个解析为json,
- 过滤掉其名称在大多数语言中不能用作标识符的字段
- 小写剩余名称
- 将结果序列化为字符串
它在小型测试中表现如预期, 但在 8.6M 项目序列的实时数据上,输出序列明显更长 比输入序列:
import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.apache.spark._
val txt = sc.textFile("s3n://...")
val patt="""^[a-zA-Z]\w*$""".r.findFirstIn _
val json = (for {
line <- txt
JObject(children) <- parse(line)
children2 = (for {
JField(name, value) <- children
// filter fields with invalid names
// patt(name) returns Option[String]
_ <- patt(name)
} yield JField(name.toLowerCase, value))
} yield compact(render(JObject(children2))))
我检查过它实际上增加了独特项目的数量, 所以它不仅仅是复制项目。 鉴于我对 Scala 理解和 json4s 的理解,我不明白这是怎么可能的。 大型实时数据集合是 Spark RDD,而我的测试是使用普通的 Scala Seq,但这应该没有任何区别。
上述代码中json的元素怎么比txt多?
【问题讨论】:
标签: scala apache-spark scala-2.10 for-comprehension json4s