2016-01-01 2 views
0

Мне нужно извлечь данные из xml и объединить извлеченные данные с CSV-файлом (пример столбца: 2).Spark XML с использованием xpath для создания пары значений ключа

Я попытался ниже код:

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) 

Ожидаемый результат: мне нужно выше значение в виде пары ключей значение, чтобы присоединиться к данным (Спарк внутреннее соединение)

Key : stackoverflow value : 1
Key : stackoverflow value : 1
Key : query value : 1

. Итак, я могу использовать Spark join для объединения двух наборов данных.

+0

Я попытался код ниже вал Рез = mapVal.map (х => (х \\ "ALERT" \\ "свойство" \\ "name") val res1 = res.map (x => для {e <- x.flatten} yield e.text) res1: org.apache.spark. rdd.RDD [scala.collection.immutable.Seq [String]] = MappedRDD [12] на карте в : 20 Как я могу создать значение ключа pa здесь. –

ответ

0

EDIT: Поскольку mapVal состоит только из одного элемента, вы должны применить flatMap вместо map:

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

scala> val res = (mapVal \\ "ALERT" \\ "свойство" \\ "name"). Map (x => (x.text, 1)) : 18: error: value \\ is not член org.apache.spark.rdd.RDD [scala.xml.Elem] val res = (mapVal \\ "ALERT" \\ "свойство" \\ "name"). map (x => (x. text, 1)) –

+0

Я скорректировал свой код. Получает ли он теперь желаемый результат? –

+0

Да, он работает. Спасибо –

Смежные вопросы