如何在Spark - Scala中对包含整数的文本文件进行排序?

时间:2016-04-29 07:54:37

标签: scala apache-spark dataframe apache-spark-sql

我是新手来编程,我有一个名为“test1.in”的数据文件,其中包含以下方式的随机数字 -

123
34
1
45
65

我想使用spark对这些数字进行排序,并将输出写入新文件。这是我到目前为止的代码 -

import org.apache.spark.{SparkContext, SparkConf}

val conf = new SparkConf().setMaster("local[*]").setAppName("SortingApp")
val sc = new SparkContext(conf)

val data = sc.textFile("src/main/resources/test1.in")
val d1 = data.map(_.sorted)
d1.foreach(println _)

结果不是预期的结果。

2 个答案:

答案 0 :(得分:2)

致电时:

data.map(_.sorted)

您将每条记录(这是一个字符串)映射到它""排序"版本,这意味着将字符串转换为chars的序列,并对这些字符进行排序。

您需要做的是使用map将您的功能分别应用于每条记录(因此它无法对记录进行排序),但使用RDD.sortBy

data.map(_.toInt).sortBy(t => t)

t => t是用于返回输入的标识函数,可以用Scala的内置泛型实现替换:

data.map(_.toInt).sortBy(identity)

或者,最短的版本:

input.sortBy(_.toInt)

(将返回类型RDD[String]的结果)

答案 1 :(得分:0)

使用以下行将文本文件数据转换为Int,然后对其进行排序:

val d1 = data.map(_.toInt).sorted