【问题标题】:Getting the row count by key from dataframe / RDD using spark使用 spark 从数据帧/RDD 中按键获取行数
【发布时间】:2019-06-20 02:34:20
【问题描述】:

我有一个逗号分隔的文件。假设我有 Accounts 文件并且我有以下数据

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 个文件的循环中执行此操作,并且我正在更新并发映射中的计数,因为 acctid 存在于所有 8 个文件中。地图中的计数是累积和。这 8 个文件预计有数百万行。

我有这些问题

实现这一目标的最佳方法是什么。 GroupByKey 更好还是 ReduceByKey。我应该使用 RDD 还是数据框。 ?

你能分享例子吗

谢谢

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    只需使用df.groupBy("AcctId").count。这样你就可以避免从 Tungsten 反序列化。此外,您将获得一个数据框作为输出。

    顺便说一句,考虑读取整个目录而不是一个接一个的 csv 文件。

    【讨论】:

    • 谢谢,我正在使用groubby,但你知道groub by 是快还是减少。你有什么建议?
    • groupBy() 是一个 DataFrame 方法(不是groupByKey()!)。一旦使用钨,它可能会很快。但它也可能很慢(例如,如果每个键都有很多行并且您想应用一些高级功能)。这取决于您的实际问题。
    猜你喜欢
    • 1970-01-01
    • 2019-09-03
    • 2019-02-17
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多