2017-05-25 103 views
0

我有csv文件,有近300k條記錄。它看起來像這樣如何從文件檢索特定限制數據

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

那麼,我需要解析它,並創建2個單獨的文件與500個最頻繁的列(名稱和城市)。例如,在300K記錄,我有20K克斯(名稱),1K約翰(名稱),25K弗雷德(名稱),並單獨的CSV文件,遞減

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

同樣的500名最常見的名字與城市 如何做到最好?

+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 CAVET:Setting winutils.exe

+0

謝謝!這個對我有用 –

相關問題