从DataFrame向量列中删除项目

时间:2016-07-19 10:09:08

标签: python apache-spark pyspark

我有一个包含单列'value'的DataFrame。我想用空格拆分它,从拆分中删除第一个项目,然后将剩余的项目重新组合成一个向量列。

使用UDF或转换为RDD非常容易,但出于性能和代码简单的原因,我只想使用DataFrame API。

我能做的最好的就是:

import pyspark.sql.functions as F
from pyspark.ml.feature import VectorAssembler
df = sqlContext.createDataFrame([['10 11 12']], ['value'])
df_split = df.select(F.split('value', ' ').alias('split'))
n = df_split.select(F.size(df_split['split'])).collect()[0][0]
df_columns = df_split.select([F.col('split')[i].astype('int').alias(str(i)) for i in range(1, n)])
v = VectorAssembler(inputCols=[str(i) for i in range(1, n)], outputCol='result')
df_result = v.transform(df_columns).select('result')

它可以工作,但需要额外的操作(在拆分后获取列的大小),以及这么简单的任务的大量代码。有没有更简单的方法呢?

此外,VectorAssembler不适用于非数字类型。

Spark 2.0.0,python 3.5。

0 个答案:

没有答案