【问题标题】:How to retrieve specific limit data from file如何从文件中检索特定的限制数据
【发布时间】:2017-05-25 22:42:10
【问题描述】:

我的 csv 文件包含近 30 万条记录。看起来是这样的

Id, Name, City
1   Alex New York
2   Alex Florida
3   John New York
...
300k Alex New York

好吧,我需要解析它并创建 2 个单独的文件,其中包含 500 个最常见的列(名称和城市)。例如,在 300k 条记录中,我有 20k Alex(name)、1k John(name)、25k Fred(name),并按降序制作了 500 个最常见的名字的单独 csv 文件

Id, Name
1. Fred
2. Alex
3. John

城市也一样 如何做到最好?

【问题讨论】:

  • 您必须使用值映射并使用出现次数不断更新映射,然后使用比较器根据值对映射进行排序

标签: java file csv


【解决方案1】:

这似乎是 Apache Spark 的工作。使用如此繁重的框架可能有点矫枉过正,但它提供了优雅且可扩展的解决方案来处理大数据(即使对于相对较小的数据,如 300K)。

所以这里有一个解决方案:

SparkSession spark = SparkSession.builder()
                  .master("local")
                  .appName("CSV Processor")
                  .getOrCreate();
Dataset<Row> df = spark.read()
                  .option("header", "true")
                  .csv("input.csv");
df.printSchema();
Dataset<Row> grouped = df.groupBy("Name")
       .count()
       .sort(org.apache.spark.sql.functions.col("count").desc())
       .limit(500);
grouped.show();
grouped.coalesce(1)
       .write()
       .mode("overwrite")
       .option("header", "true")
       .csv("output.csv");

依赖关系:

org.apache.spark:spark-core_2.10:2.1.1
org.apache.spark:spark-sql_2.10:2.1.1

Windows 提示:Setting winutils.exe

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多