2017-06-05 16 views
2

私はレコードのリスト/配列を持っていますが、私はexplodeを使ってリストからデータを抽出しています。私は、JavaでSpark SQLを使用して、展開された結果から最初のレコードを選択したいと思います。グループから最初のレコードを選択する方法は?

Dataset<Row> ds= ds.select(
    json.col("*"), 
    explode(json.col("records.record.newrecord")).as("newrecord")); 
ds= ds.select(ds.col("EVENT_SEQ"), ds.col("newrecord").apply("event").as("EVENTTYPE")); 

現在のデータ:

|   EVENT_SEQ|EVENTTYPE| 
+--------------------+---------+ 
|5a694d77-bc65-4bf...|  0| 
|5a694d77-bc65-4bf...|  0| 
+--------------------+---------+ 

要件:

|   EVENT_SEQ|EVENTTYPE| 
+--------------------+---------+ 
|5a694d77-bc65-4bf...|  0| 
+--------------------+---------+ 

私は、この目的のためにCloumn.applyことを示唆しているドキュメントを見てきましたが、私は私が始めるのに十分な助けを発見していません。

答えて

1

これは確かにgroupByオペレータfirstの機能です。

val ds = Seq(
    ("5a694d77-bc65-4bf...", 0), 
    ("5a694d77-bc65-4bf...", 0) 
).toDF("EVENT_SEQ", "EVENTTYPE") 
scala> ds.show 
+--------------------+---------+ 
|   EVENT_SEQ|EVENTTYPE| 
+--------------------+---------+ 
|5a694d77-bc65-4bf...|  0| 
|5a694d77-bc65-4bf...|  0| 
+--------------------+---------+ 

scala> ds.groupBy("EVENT_SEQ").agg(first("EVENTTYPE")).show 
+--------------------+-----------------------+ 
|   EVENT_SEQ|first(EVENTTYPE, false)| 
+--------------------+-----------------------+ 
|5a694d77-bc65-4bf...|      0| 
+--------------------+-----------------------+ 
関連する問題