如何添加有关最大项目的新列?

时间:2019-06-13 10:32:20

标签: python apache-spark dataframe pyspark

我有一个来自csv项目的spark数据框。

csv_df = sqlContext.read.format("csv").option("header", "true").option("inferSchema", "false").load(csv_path)

有一个列为“速度”

  

速度:[3、5、4、8、7、6、1]

我想添加一个新列以标识这是加速度还是加速度。

要首先实现此目的,我需要找到最大项[8],并将所有项标记为“ A”,直到此为止,然后将“ D”标记为开始:

  

Accel:[“ A”,“ A”,“ A”,“ A”,“ D”,“ D”,“ D”]

我可以使用pandas和numpy库来实现

#find max location:
maxloc=np.argmax(csv_pandas_df.Speed)
csv_pandas_df.loc[0:maxloc,'Accel']='A'
csv_pandas_df.loc[maxloc:csv_pandas_df.shape[0],'Accel']='D'

是否有任何方法可以通过使用本机Spark DataFrame来实现?

1 个答案:

答案 0 :(得分:0)

不确定本机火花,但是可以使用UDF(用户定义函数)来实现。

from pyspark.sql.functions import udf
import operator

def acc_dec(speeds):
  if len(speeds) is 0:
    return []
  index, value = max(enumerate(speeds), key=operator.itemgetter(1))
  return ["A"]*(index+1) + ["D"]*(len(speeds)-index-1)
acc_dec_udf = udf(acc_dec)

df_accel = csv_df.withColumn("Accel", acc_dec_udf("Speed"))