我尝试打开文本文件,处理每一行并将结果存储在多维数组中。
我的输入文件包含:
1 1 3 2
2 2.2 3 1.8
3 3 1.2 2.5
我想创建一个像这样的3x4数组:
(1, 1, 3, 2)
(2, 2.2, 3 1.8)
etc
我的代码是:
for (line <- Source.fromFile(inputFile).getLines) {
var counters = line.split("\\s+")
sc.parallelize(counters).saveAsTextFile(outputFile)
}
我正在尝试将结果保存在文本中,但首先我在运行过程中遇到了异常:
apache.hadoop.mapred.FileAlreadyExistsException:
Output directory file:/home/user/Desktop/output.txt already exists
我猜这是关于并行化的,但这是我找到保存数组的唯一方法。
此外,存储的内容不是我想要的。该文件有两个包含以下内容的分区文件:
第1部分:
1
1
第2部分:
3
2
如何从一个维度数组创建多维数组,如何将其保存在文本文件中?
答案 0 :(得分:1)
您为每行创建单独的RDD(并将其保存到文件),而不是为整个文件创建一个RDD。此外,由于您使用Spark(请参阅免责声明)来编写该文件 - 您还可以使用它来读取它。以下是解决问题的方法:
sc.textFile(inputFile)
.map(_.split("\\s+").mkString(",")) // if you want result to be comma-delimited
.repartition(1) // if you want to make sure output has one partition (file)
.saveAsTextFile(outputFile)
虽然有一些免责声明:
fromFile
加载) - 为什么需要Spark? Spark通常应该用于对于单个文件/单个进程的内存来说太大而无法处理的数据outputFile
在运行之前不存在 - 否则您将看到相同的异常(Spark小心不要覆盖您的数据,因此它如果输出文件(实际上是文件夹)已经存在,则会失败)