2016-11-07 110 views
1

爲什麼列1st_from_end包含空:如何使用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]是一個Python化的方式來獲取列表中的最後一項。它在pyspark中怎麼不起作用?

回答

2

不幸的是,火花dataframes不支持數組索引-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

相關問題