2016-09-20 107 views
0

我爲特徵閱讀Spark MLlib doc變換,但我仍然感到困惑的兩個簡單的情況:列星火MLlib變換

1.How對付單列靈活? 例如,我有一個名爲「date」的列,它是「YYYY-MM-DD」格式,我想根據「date」生成一個名爲「week」的新列。如果使用pandas.Dataframe,可以使用Series.apply完成,我的問題是如何在Spark MLlib中執行此操作?

2.如何根據多列生成新列? 例如,我想根據支出和收入來計算投資回報率,這是簡單的pandas.DataFrame:

df['roi'] = (df['income'] - df['spend'])/df['spend'] 

對於Spark.MLlib,我發現SQLTransformer可用於同樣的工作,但我不知道

任何人都可以告訴我如何處理在Spark.MLlib?非常感謝

回答

2

一個乾淨的選項是定義您自己的功能,並使用withColumn()適用於您的DataFrame。請注意,這與MLlib無關,因爲它指的是Spark的機器學習模塊。

from pyspark.sql.types import FloatType 
from pyspark.sql.functions import udf 

def roiCalc(income, spend): # Define function 
    return((income - spend)/spend) 

roiCalculator = udf(roiCalc, FloatType()) # Convert to udf 
df.withColumn("roi", roiCalculator(df["income"],df["spend"])) # Apply to df 
+0

非常感謝,這就是我以前感到困惑 – linpingta