2017-12-01 11 views
2

私は1列のデータフレームを持っています。その列の各行には、文字列値の配列を持っている:私のスパークで配列列の値にアクセスする方法は?

値2.2 DATAFRAME

["123", "abc", "2017", "ABC"] 
["456", "def", "2001", "ABC"] 
["789", "ghi", "2017", "DEF"] 

org.apache.spark.sql.DataFrame = [col: array] 

root 
|-- col: array (nullable = true) 
| |-- element: string (containsNull = true) 

配列の要素にアクセスするための最良の方法は何ですか?たとえば、2017年の4番目の要素で異なる値を抽出したいとします(答え "ABC"、 "DEF")。

答えて

1

からgetItemを参照してください?

配列列の要素へのアクセスは、getItemオペレータです。

のgetItem(キー:任意):カラムアレイのうち位置順序にある​​項目を取得し、又はMapType内のキーのキーによって値を取得し発現。

(ordinal)を使用して、ordinalの位置にある要素にアクセスすることもできます。

val ds = Seq(
    Array("123", "abc", "2017", "ABC"), 
    Array("456", "def", "2001", "ABC"), 
    Array("789", "ghi", "2017", "DEF")).toDF("col") 
scala> ds.printSchema 
root 
|-- col: array (nullable = true) 
| |-- element: string (containsNull = true) 
scala> ds.select($"col"(2)).show 
+------+ 
|col[2]| 
+------+ 
| 2017| 
| 2001| 
| 2017| 
+------+ 

それはスーツに近づく個人的な選択と味の問題だあなたより良い、すなわちgetItemまたは単に(ordinal)

where/filterと続き、selectdistinctは正しい回答を返します(@Willのように)。

関連する問題