我有一个逗号分隔的文件。假设我有“帐户”文件,并且有以下数据
AcctId, AcctName, City, State, Deductible
1,ABC,Fremont,CA,4000
1,DEF,UnionCity,CA,10000
2,FFF, Hayward,CA,2323
I want to have a dataset or a list which has AcctId,Count as
1,2
2,1
我有以下代码
val df: DataFrame = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", true) // Use first line of all files as header
.option("delimiter", ",")
.option("inferSchema", "true") // Automatically infer data types
.load(file)
val accGrpCountsDs = df.groupByKey(acctId => acctId).count()
我正在对8个文件循环执行此操作,并且由于所有8个文件中都存在acctid,因此我正在更新并发映射中的计数。地图中的计数是累积总和。这8个文件预计将具有数百万行。
我有这些问题
实现此目标的最佳方法是什么? GroupByKey是Better还是ReduceByKey。我应该使用RDD还是数据帧。 ?
请您分享一些例子
谢谢
答案 0 :(得分:1)
只需使用df.groupBy("AcctId").count
。这样,您可以避免钨丝反序列化。同样,您将获得一个数据帧作为输出。
顺便说一句,考虑一一读取整个目录,而不是单个csv文件。