2016-11-19 39 views
0

來自熊貓的背景,我正在用Spark 2.0.2(PySpark)進行簡單的操作。如何將新列添加到現有數據框中,該數據框包含現有列的前兩個字符。理想情況下,我想要的基本上是Spark 2.0.2數據框 - 如何添加一個新列,包含現有列的前兩個字符?

df.withColumn("new_column", col('FirstName')[:2]) 

明顯Spark 2.0.2無法理解。

數據源

df = sqlContext.createDataFrame([("Ranjeet", 4, "California", 2), ("Anthony", 5, "Hawaii", 3), ("Diana", 6, "Singapore", 4)], ["FirstName", "Sales", "State", "Cost"]) 
df.show() 

嘗試#1

from pyspark.sql.functions import col 
df.withColumn("new_column", col('FirstName').map(lambda x: x[0][:2])) 

錯誤:柱對象不是可調用

學嘗試#2 - 創建包含姓的前兩個字符新的數據幀但我如何將它合併回df?

from pyspark.sql import Row 
row = Row("block_x") 
df.select('FirstName').rdd.map(lambda x: x[0][:2]).map(row).toDF().show() 

謝謝你的時間。

尋找一個簡單而優雅的解決方案。可能是我在這裏失去了一些東西。

回答

1

可以使用substring功能和withColumn

from pyspark.sql.functions import substring 

df.withColumn("new_column", substring('FirstName', 0, 2)) 
相關問題