2016-09-20 65 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