从数据帧向量列中删除项

2024-04-27 01:08:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,只有一列'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。你知道吗


Tags: columns代码inimportdfforvaluerange