我有一个数据帧,只有一列'value'
。我想按空格拆分,从拆分中删除第一个项,然后将其余项重新组合到一个向量列中。你知道吗
使用UDF或者通过在RDD之间进行转换非常容易,但是出于性能和代码简单的原因,我只想使用dataframeapi。你知道吗
我只能这样做:
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。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐