我的RDD格式如下
RDD1=[['2','1','3','4'],['1','2','3','4'],['5','3','4','1']....['1','3','4','5']]
或
RDD1=[('2','1','3','4'),('1','2','3','4'),('5','3','4','1')....('1','3','4','5')]
我希望将列中的最小/最大值作为
的o / pRDD_OUT_MAX=[('5','3','4'...'5')]
RDD_OUT_Min=[('1','1','3'...'1')]
我们如何使用Pyspark代码来实现,是否可以使用任何映射/缩小来找到MIN / Max。请帮助
rdd=df1.rdd.map(list)
rdd=df1.rdd.map(tuple)
我在下面尝试过,但是没有运气
rdd1.min()
rdd1.max()
答案 0 :(得分:1)
您可以使用reduce()
方法。试试这个:
>>> rdd.reduce(lambda x,y:
(min(x[0],y[0]),min(x[1],y[1]),min(x[2],y[2]),min(x[3],y[3])))
(1, 1, 3, 1)
>>> rdd.reduce(lambda x,y: (max(x[0],y[0]),max(x[1],y[1]),max(x[2],y[2]),max(x[3],y[3])))
(5, 3, 4, 5)
它在整个rdd中对元组的每个条目进行成对的最小/最大检查。
稍短,但较难阅读:
>>> rdd.reduce(lambda x,y: tuple(map(min, zip(x,y))))
(1, 1, 3, 1)
>>> rdd.reduce(lambda x,y: tuple(map(max, zip(x,y))))
(5, 3, 4, 5)
您可以认为它正在这样扩展:
lambda x,y: tuple(map(max, zip(x,y))) =
lambda x,y: tuple(map(max, [(x[0],y[0]),(x[1],y[1]),(x[2],y[2]),(x[3],y[3])]) =
lambda x,y: tuple([max(x[0],y[0]),max(x[1],y[1]),max(x[2],y[2]),max(x[3],y[3])]) =
lambda x,y: (max(x[0],y[0]),max(x[1],y[1]),max(x[2],y[2]),max(x[3],y[3]))
实际上,它使用生成器,这就是为什么需要最后一个tuple()
的原因。