我和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,但它没有用。
你能帮我完成这项任务吗?
答案 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]))))
使用数据框或数据集而不是行类型可以提供更好的性能。