Python Pyspark rdd操作!(蟒蛇3号,斯巴克2号)
我有一个“input.txt”文件,其中包含以下内容:Python Pyspark rdd操作!(蟒蛇3号,斯巴克2号),python,python-3.x,apache-spark,pyspark,Python,Python 3.x,Apache Spark,Pyspark,我有一个“input.txt”文件,其中包含以下内容: [10,21,90,34,40,98,21,44,59,21,90,34,29,19, 21,90,34,29,49,78 ] 由于我是一名初学者,我尝试使用RDD操作对上述文件执行以下操作。(我可以通过将RDD元素复制到列表来执行此操作): 我想显示上面给定的列表和列表的第一个元素 我希望通过RDD显示排序后的输出(升序和降序),并使用RDD显示列表中不同的元素 显示给定列表的最大值和最小值 将上述列表与新输入组合在一起,格式为:{3
[10,21,90,34,40,98,21,44,59,21,90,34,29,19, 21,90,34,29,49,78 ]
由于我是一名初学者,我尝试使用RDD操作对上述文件执行以下操作。(我可以通过将RDD元素复制到列表来执行此操作):
- 我想显示上面给定的列表和列表的第一个元素
- 我希望通过RDD显示排序后的输出(升序和降序),并使用RDD显示列表中不同的元素
- 显示给定列表的最大值和最小值
- 将上述列表与新输入组合在一起,格式为:
,并显示输出{30,35,45,60,75,85}
- 使用具有不同值的reduce提供列表元素的总和
rdd.distinct().reduce(lambda x,y:x+y)
rdd.reduce(lambda x,y:x+y)
我可以使用Pyspark操作和转换来完成上述所有任务吗?还是我太野心勃勃了?为这么多问题道歉。我对spark感兴趣才一个星期
编辑
我不想在代码中硬编码列表。
我想读取文件(input.txt)。
我试着用
data = sc.textFile("./input.txt")
collected = data.collect()
print(data)
d2 = d1[0].encode('ascii', 'ignore')
print(d2)
但是使用这种方法,如果不将rdd转换为普通Python列表(d3=d2.strip(“{}”).split(“,”),我就无法将其转换为Int列表
我无法使用max(d2)或d2.max()获得最大值,因为它说max未移植
我希望我现在说清楚了 首先,将数据放入RDD:
rdd = sc.parallelize([10,21,90,34,40,98,21,44,59,21,90,34,29,19, 21,90,34,29,49,78])
显示上述给定列表和列表的第一个元素
rdd.collect()
rdd.take(1)
我还希望通过RDD显示排序后的输出(升序和降序),并使用RDD显示列表中的不同元素
rdd.distinct().sortBy(lambda x:x).collect()
rdd.distinct().sortBy(lambda x:-x).collect()
显示给定列表的最大值和最小值
rdd.max()
rdd.min()
以{30,35,45,60,75,85}的形式将上述列表与新输入组合,并显示输出
newrdd = sc.parallelize({30,35,45,60,75,85})
rdd.union(newrdd).collect()
使用具有不同值的reduce提供列表元素的总和
rdd.distinct().reduce(lambda x,y:x+y)
使用reduce提供列表元素的总和
rdd.reduce(lambda x,y:x+y)
附言。
事实上,如果按rdd降序对元素进行排序,max元素就是这个rdd的第一个元素。因此,您可以使用max()
,在不使用max>的情况下获得此rdd的最大值,因此,以下是代码:
rdd.distinct().sortBy(lambda x:-x).take(1)
谢谢你的回答!但我不想在代码中硬编码列表。我想读取文件(input.txt)。我尝试使用data=sc.textFile(“./input.txt”)collected=data.collect()print(data)d2=d1[0]。encode('ascii','ignore')print(d2),但使用这种方法,如果不将rdd转换为普通Python列表(d3=d2.strip(“{}”).split(','),我就无法将其转换为Int列表。我无法使用max(d2)或d2.max()获得最大值,因为它说max未移植。我希望我现在说清楚了!如果无法使用max()
,则可以对其排序并获取第一个元素。嗨@iPrince!我使用sorted()然后使用take()来执行相同的操作。有更好的方法吗?