2015-12-02 80 views
-4

我是stackoverflow的新手。我需要帮助从“data.txt”文件(大小:1.84 GB)以组织形式提取数据。我正在使用scala-2.10.4和spark-1.1.0。斯卡拉 - RDD [字符串]到RDD [矢量]

的data.txt中的内容在下面的图案

ATOM 00000000 00000004 00000001 17.808 15.749 6.649 -0.548 15.9994

ATOM 00000001 00247690 00000002 20.9489 12.0511 5.4639 0.4238 1.008

有〜300K data.txt文件中的原子具有相同的模式,每个帧中的原子数大约为286890个(第2个属性)。即帧00000000包含286890个原子,并且帧00000001包含286890个原子。

其中:

  • 第一属性只是告诉它是否是一个原子条目或HEAD条目(有每 帧只有一个HEAD条目和它有一些系统属性/信息)
  • 第二属性是“帧号”
  • 第三属性是“原子ID /数”
  • 第四属性是“原子类型”
  • 第五,第六和第七属性吨原子的位置向量(x,y,z)
  • 八个属性是原子的电荷
  • 第九个属性是原子的质量。

我需要由帧从上述数据访问数据帧,并计算几件事情等,

1.Sum每一帧的块。公式:M =Σmi(i < - 1至n)

2.惯性惯性。公式:我=Σmiri(我< - 1至n) 和几个更类似的东西。如你所见,我需要从data.txt中提取数据。 我使用的,

val logFile = "/path/data.txt" 
    val logData = sc.textFile(logFile, 2).cache() 

logData是RDD [字符串],我只能用它来计算行数与特定pettern。 但是,我需要从每一帧中得到每一行(即,质量)的第7场来计算质量总和,这是我不知道该怎么做的。

*我需要使用scala,不允许使用其他语言。

请帮我知道该怎么做。 我想把它转换成RDD [矢量]将工作,但我不知道如何访问该矢量的特定字段。

+4

发布您尝试过的以及它失败的方式。 – Daenyth

+2

你真的会问一些问题陈述的代码! 。 – WoodChopper

+0

这样一个小文件,你不需要使用Spark。代码也会更简单。 – kostya

回答

1

首先,在尝试解决Spark问题之前,您真的需要学习一些关于Spark和函数式编程的知识,特别是在将问题发布到StackOverflow之前 - 正如您从评论中看到的那样,当人们讨厌它时从发布之前没有投入到学习基础知识的问题中可以明显看出。

也就是说,将文本/ csv文件转换为rdd之前已经在SO上进行了回答(请参阅How do I convert csv file to rdd),因此请看一下。一旦你有你的类型RDD[Array[String]],你只需像访问元素一样访问元素。在下面的例子中,我将每一行映射到一个键值对,以说明如何访问数组的元素。我明白,你需要做一些计算,所以你可能需要使用另一个函数,而不是map,但希望你明白了。

val logData: RDD[Array[String]] = sc.textFile("/path/data.txt", 2).map(line => line.split(",") 

logData.map(a => (a.head, (a(1),a(2))) 

作为最后一个音符,我会强烈建议您升级到星火的最新版本(1.5.2在写这篇的时间),而不要使用旧版本像1.1.0。 Spark自1.1.0以来已经发生了很大变化,Databricks中的spark-csv软件包将为您解析csv文件,适用于较新的版本。

相关问题