【问题标题】:Spark XML using xpath to produce key value pairSpark XML 使用 xpath 生成键值对
【发布时间】:2016-01-09 19:48:43
【问题描述】:

我需要从 xml 中提取数据并将提取的数据与 CSV 文件连接(示例列:2)。

我试过下面的代码:

val input = sc.wholeTextFiles("/user/hadoop/selva/Test.xml")
val xmlVal = input.values
val mapVal = xmlVal.map(x => scala.xml.XML.loadString(x))
val res = mapVal.map(x => (x \\ "ALERT" \\"property" \\"name")text)
res.collect()
Output : res3: Array[String] = Array(stackoverflowstackoverflowquery)

预期输出:我需要上面的值以键值对的形式加入数据。(Spark 内连接)

键:stackoverflow 值:1
键:stackoverflow 值:1
键:查询值:1

所以,我可以使用 Spark join 来连接两个数据集。

【问题讨论】:

  • 我试过下面的代码 val res = mapVal.map(x => (x \\ "ALERT" \\"property" \\"name") val res1 = res.map( x = > for { e : 20 我如何在这里创建键值对。

标签: scala apache-spark


【解决方案1】:

编辑: 由于mapVal 仅包含一个元素,因此您必须应用flatMap 而不是map

mapVal.flatMap(x=>(x\\"ALERT" \\"property" \\"name").map(y=>(y.text,1)))

【讨论】:

  • scala> val res = (mapVal \\"ALERT" \\"property" \\"name").map(x=>(x.text,1)) :18 : 错误: 值 \\ 不是 org.apache.spark.rdd.RDD[scala.xml.Elem] val res = (mapVal \\ "ALERT" \\"property" \\"name").map 的成员(x=>(x.text,1))
  • 我已经更正了我的代码。它现在是否给出了预期的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2019-09-03
  • 2015-03-02
  • 1970-01-01
相关资源
最近更新 更多