2016-11-07 3 views
1

はなぜ列1st_from_endはNULLを含まない:pysparkを使用してリストから最後の項目を取得するにはどうすればよいですか?

from pyspark.sql.functions import split 
df = sqlContext.createDataFrame([('a b c d',)], ['s',]) 
df.select( split(df.s, ' ')[0].alias('0th'), 
      split(df.s, ' ')[3].alias('3rd'), 
      split(df.s, ' ')[-1].alias('1st_from_end') 
     ).show() 

enter image description here
私は[-1]を使用すると、リスト内の最後の項目を取得するためのニシキヘビの方法だと思いました。どのようにそれはpysparkで動作しませんか?

答えて

2

は残念ながら、スパークデータフレームは、アレイ上-1インデックスをサポートしていませんが、あなたは自分のUDF書き込み、または例えば、size()機能が内蔵されて使用することができます。

>>> from pyspark.sql.functions import size 
>>> splitted = df.select(split(df.s, ' ').alias('arr')) 
>>> splitted.select(splitted.arr[size(splitted.arr)-1]).show() 
+--------------------+ 
|arr[(size(arr) - 1)]| 
+--------------------+ 
|     d| 
+--------------------+ 
+0

おかげで、私の疑念を確認します。私の解決策はそれより少し面倒だった: 'reverse(split(reverse(df.s)、 '')[0])' – jamiet

関連する問題