在rdd中基于现有列创建列

时间:2017-03-02 12:31:01

标签: python apache-spark pyspark

我和pyspark一起工作。我加载了一个.csv文件并将其转换为行。 之后,我选择了一些列并将它们放入NumericalElementsRDD

NumericalElementsRDD = elementsRDD.map(lambda p: Row(g1=int(p[30]), g2=int(p[31]), g3=int(p[32])))

问题是我需要创建另一个列,让我们称之为success_fail。它背后的逻辑是:success_fail values 1 if p[32] >= 10 else 0

我试图在elementsRDD.map的表达式中插入另一个lambda,但它没有用。

你能帮我完成这项任务吗?

2 个答案:

答案 0 :(得分:0)

建立这个很容易。

请参阅,您创建了一个行的RDD。要将其转换为Dataframe很容易。

azure site appsetting add dbuser="<database user>"

在此之后您可以使用函数NumericalElementsDF = NumericalElementsRDD.toDF() ,此函数将创建或更新现有列,请参阅here文档。

那么,如何更新?使用此命令:

withColumn()

您可以看到我使用的函数NumericalElementsDF.withColumn('g4', when(col('g3') >= 10, 1).otherwise(0)) 就像数据帧的here一样。

对于python,如果您将RDD转换为RDD of Rows。更好地使用数据帧来获得更快的响应。

答案 1 :(得分:0)

如果你想在RDD中构建它,你可以尝试这个,

condition_Check = lambda v: 1 if v >= 10 else 0
NumericalElementsRDD = elementsRDD.map(lambda p: Row(g1=int(p[30]), g2=int(p[31]), g3=int(p[32]),success_fail=condition_Check(int(p[32]))))

使用数据框或数据集而不是行类型可以提供更好的性能。