在rdd中基于现有列创建列

2024-04-25 01:34:39 发布

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

我在和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

我试着在表达式中插入另一个lambda元素rdd.map,但没用。在

你能帮我完成这个任务吗?在


Tags: 文件csvlambdamap逻辑pysparkintrow
2条回答

如果你想在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]))))

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

建造这个很容易。在

看,您创建了一个行的RDD。把它转换成数据帧很容易。在

NumericalElementsDF = NumericalElementsRDD.toDF()

在此之后,您可以使用函数withColumn(),此函数将创建或更新现有列,请参见here文档。在

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

^{pr2}$

您可以看到,我使用了函数when(),它的工作原理与数据帧的if-seehere类似。在

对于python,如果将RDD转换为行的RDD。最好使用数据帧来获得更快的响应。在

相关问题 更多 >