我的csv文件有近300k的记录。看起来像这样
Id, Name, City
1 Alex New York
2 Alex Florida
3 John New York
...
300k Alex New York
好吧,我需要解析它并创建2个单独的文件,其中包含500个最频繁的列(名称和城市)。例如,在300k记录中,我有20k Alex(名字),1k John(名字),25k Fred(名字)并且制作单独的csv文件,其中有500个最常见的名字下降
Id, Name
1. Fred
2. Alex
3. John
与城市一样 如何做到最好?
答案 0 :(得分:0)
这似乎是 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