如何使用JAVA SCAP编码从CSV文件中选择3个列,也就是最后和


0

我是Snad的新手,我想编写 Spark Java程序,就像我必须加载包含75列和140万行的CSV文件一样。在给出文件时,我们只需要选择3列,我必须为此编写给定条件,并且必须对1列执行groupbykey,并且必须对另一列执行sum

2 答案

0

root据运行的Spark版本(1.3或1.4),您可以使用databricks spark csv包加载csv文件,其中包括:

spark1.3

val df = sqlContext.load("com.databricks.spark.csv", Map("path" -> filePath,"header"->"true"))

spark1.4

val df = sqlContext.read.format("com.databricks.spark.csv").options(Map("path" -> filePath,"header"->"true")).load()

下面我假设您只对列2、3和32感兴趣,并且需要将列2解析为日期,列3是string类型的id,列32是需要解析为double的量。

因此,加载文件后,您可以获得如下3列:

val allData = df.map(row => (row.getString(3), row.getString(32).toDouble, LocalDate.parse(row.getString(2), DateTimeFormatter.ISO_LOCAL_DATE))

(注意,我使用的是java 8的一部分,这是Java的一部分)。如果您愿意,可以使用jodatime。)

假设您只想要日期晚于2015年5月24日的行,那么可以使用过滤器来除去不需要的行

val startDate = LocalDate.of(2015,5,24)
val filteredData = allData.filter{case(_,_,date) => date.isAfter(startDate)}

现在,要对每个id的特定列求和,需要将数据 map到 key值对(id,amount),然后使用reducebykey求和

filteredData.map{case(id,amount, _) => (id, amount)}
            .reduceByKey(_ + _)

这就是你要找的吗?


0

将csv文件放入spark的最简单方法是使用spark csv包运行它。

这个网页上的例子应该能满足你的需要,应该只有几行:

https://github.com/databricks/spark-csv


我来回答

写文章

提问题