1

XMLソースをdatabricksから使用しています。ここに私のXMLサンプルデータがあります。 (彼らはhs idによってグループ化] XMLファイルに現れるのと同じ順序でSparkおよびgroupby操作のXMLソース

<ds Name="abc"> 
    <node begin="18" end="22" val="Organic" type="type1"> 
     <hs id="0" begin="18" end="91" /> 
    </node> 
    <node begin="22" end="23" val="Cereal"> 
     <hs id="0" begin="18" end="91" /> 
    </node> 
    <node begin="23" end="25" val="Kellogs" type="type2"> 
     <hs id="0" begin="18" end="91" /> 
    </node> 
    <node begin="22" end="23" val="Harry" type="type1"> 
     <hs id="1" begin="108" end="520" /> 
    </node> 
    <node begin="23" end="25" val="Potter" type="type1"> 
     <hs id="1" begin="108" end="520" /> 
    </node> 
</ds> 

は、私はすべてのnode.valを組み合わせたいです。例えば

、上記データのためのO/Pにすべきである:

名HS番号ヴァル

ABC 0有機穀物

ABC 1ハリーポッター

ここで私はdatabricksからXMLソースをロードしています:

データセットをhs idでグループ化する方法がわかりません。注文が確実に保持されていることを確認してください。

val df_ds = sqlContext.sql("SELECT Name, node.type from ds") 

答えて

1

試してみてください。結果(ID)= result.getOrElse(ID、アレイ[文字列](ID:私はこれでラインを交換しなければならなかった:

import scala.collection.mutable.LinkedHashMap 
import org.apache.spark.sql.Row 
import org.apache.spark.sql.functions.udf 

val comb = udf((rows: Seq[Row]) => { 
    val result = LinkedHashMap[Long, Array[String]]() 
    for (row <- rows) { 
    val id = row.getAs[Row]("hs").getAs[Long]("id") 
    result(id) = result.getOrElse(id, Array[String]()) :+ row.getAs[String]("val") 
    } 
    result.values.toArray.map(x => x.mkString(" ")) 
}) 

df.printSchema 
root 
|-- Name: string (nullable = true) 
|-- node: array (nullable = true) 
| |-- element: struct (containsNull = true) 
| | |-- begin: long (nullable = true) 
| | |-- end: long (nullable = true) 
| | |-- hs: struct (nullable = true) 
| | | |-- #VALUE: string (nullable = true) 
| | | |-- begin: long (nullable = true) 
| | | |-- end: long (nullable = true) 
| | | |-- id: long (nullable = true) 
| | |-- type: string (nullable = true) 
| | |-- val: string (nullable = true) 

df.withColumn("comb", comb(df("node"))) 
+0

コード内の小さなバグがありました.toString)):+ row.getAs [String]( "pos") – user3803714

関連する問題