Pyspark RDD操作! (Python3,Spark2)

时间:2018-09-20 15:00:48

标签: python python-3.x apache-spark pyspark

我有一个包含以下内容的“ input.txt”文件:

Script error

由于我是初学者,因此我正在尝试使用RDD操作对上述文件执行以下操作。 (我能够通过将RDD元素复制到列表中来执行此操作):

  • 我想显示上面给出的列表和列表的第一个元素。

  • 我想通过RDD显示排序后的输出(升序和降序),并使用RDD显示列表的不同元素。

  • 显示给定列表的最大值和最小值。

  • 在列表上方添加新输入,格式为:[10,21,90,34,40,98,21,44,59,21,90,34,29,19, 21,90,34,29,49,78 ] ,并显示输出。

  • 使用带有不同值的reduce提供列表元素的总和。

  • 使用reduce提供列表元素的总和。

我可以使用Pyspark动作和变换来完成上述所有任务吗?还是我有野心?道歉这么多问题。我只呆了一个星期。

编辑

我不想用代码对列表进行硬编码。 我想读取文件(input.txt)。 我尝试使用

{30,35,45,60,75,85}

但是使用这种方法,我无法将rdd转换为Int列表,而不将其转换为普通的Python列表(d3 = d2.strip(“ {}”)。split(','))。

我无法使用max(d2)或d2.max()获得tha max,因为它说max是未分配的。

我希望我现在能把自己弄清楚!

1 个答案:

答案 0 :(得分:2)

首先,将数据放入RDD:

process(imgComplex)

显示上面给定的列表和列表的第一个元素。

main.cpp:140:74: error: invalid initialization of non-const reference of type ‘cv::Mat_<float>&’ from an rvalue of type ‘cv::Mat_<float>’

我还想通过RDD显示排序后的输出(升序和降序),并使用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)

在列表上方添加新输入,格式为:{30,35,45,60,75,85}并显示输出。

rdd.distinct().sortBy(lambda x:x).collect()
rdd.distinct().sortBy(lambda x:-x).collect()

使用带有不同值的reduce提供列表元素的总和。

rdd.max()
rdd.min()

使用reduce提供列表元素的总和。

newrdd = sc.parallelize({30,35,45,60,75,85})
rdd.union(newrdd).collect()

P.S。 实际上,如果您按rdd降序对元素进行排序,则max元素是该rdd的第一个元素。因此,您可以使用rdd.distinct().reduce(lambda x,y:x+y) 获得此rdd的最大值,因此,这是代码:

rdd.reduce(lambda x,y:x+y)