我想用火花来处理一个文件,但是我的输入文件有一条信息遍布3行的单个“记录”。spark阅读slipline的多行记录
Rec1 Line1
Rec1 Line2
Rec1 Line3
Rec2 Line1
Rec2 Line2
Rec2 Line3
没有钥匙链接记录的行,唯一的连接是他们是三行相邻。除了知道第四行是新记录的开始之外,没有记录分隔符。我看到的所有其他问题都与多行记录有关,似乎有一些明显的记录分隔符,而在这种情况下我没有任何记录,我不得不依赖行数。
我首先想到的是使用sliding
函数从org.apache.spark.mllib.rdd.RDDFunctions
sc.textFile("myFile.txt").sliding(3,3)
这接通我的RDD [字符串]进入和RDD [阵列[字符串]]其中在RDD每个元素是从文件3行。
在一些测试中,这看起来像它的工作是得到我想要的结果,但我注意到sliding
函数在其评估过程中实际上导致collect
。这让我担心,它在收集什么?它是整个数据文件还是其他的东西?我的文件太大而无法将全部内容收集到驱动程序中。
是sliding
是读取此文件的最佳方式,还是有更高效的方法来执行此操作?
不能使用rdd.map(_。split(“”))。map(arr =>(arr [0],arr [1]))。groupBy(_._ 2)?这意味着按照空格分隔你的线条,制作一个键,值和按键分组。 – dumitru
@dumitru groupBy文件没有密钥。我也许可以使用'zipWithIndex'来获得用于分组的密钥。这也会导致全面洗牌。 – puhlen