Spark MLlib 中的列转换

Posted

技术标签:

【中文标题】Spark MLlib 中的列转换【英文标题】:Column transform in Spark MLlib 【发布时间】:2016-09-20 06:54:32 【问题描述】:

我已经阅读Spark MLlib doc 进行特征转换,但我仍然对两个简单的案例感到困惑:

1.如何处理单列灵活? 例如,我有一个名为“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 中处理这个问题?非常感谢

【问题讨论】:

【参考方案1】:

一个干净的选项是定义您自己的函数,并使用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

【讨论】:

非常感谢,这就是我之前的困惑

以上是关于Spark MLlib 中的列转换的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark 中将数据框列转换为向量

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

Spark Scala:如何转换 DF 中的列

apache spark mllib中的逻辑回归 - mnist

Spark2.0 Pipelines

在不使用 UDF 的情况下基于映射转换 Spark DataFrame 中的列