2017-07-30 63 views
3

我剛開始使用databricks/pyspark。我使用python/spark 2.1。我已將數據上傳至表格。這個表格是一個充滿字符串的單個列。我希望將映射函數應用於列中的每個元素。我的表加載到數據幀:在DataFrame上應用映射功能

df = spark.table("mynewtable") 

我能看到的唯一途徑是別人說的話是將其轉換爲RDD應用映射函數,然後返回到數據框來顯示數據。但是,這牽扯出工作中止階段失敗:

df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF() 

所有我想要做的就是申請任何種類的地圖功能,以我的表中的數據。 例如對列中的每個字符串追加一些東西,或者在字符上執行拆分,然後將其放回到數據框中,以便我可以.show()或顯示它。

回答

4

您不能:

  • 使用flatMap因爲它會壓扁
  • 不能使用append因爲:

    • tuple或沒有append方法
    • append(如果出現在集合上)是爲e方執行的ffects並返回None

我會用withColumn

df.withColumn("foo", lit("anything")) 

map應該工作以及:

df.select("_c0").rdd.flatMap(lambda x: x + ("anything",)).toDF() 

編輯(給出的評論):

你可能想要一個udf

from pyspark.sql.functions import udf 

def iplookup(s): 
    return ... # Some lookup logic 

iplookup_udf = udf(iplookup) 

df.withColumn("foo", iplookup_udf("c0")) 

默認返回類型爲StringType,所以如果你想要別的東西,你應該調整它。