2015-10-30 128 views
0

我使用Apache的火花在斯卡拉在數據幀上運行多個列聚合例如阿帕奇星火多個聚合

select column1, sum(1) as count from df group by column1 
select column2, sum(1) as count from df group by column2 

實際的聚合不僅僅是總和(1)更復雜,但它除了點。 查詢字符串如上述示例被編譯爲每個我想聚集,我通過火花SQL上下文執行每個字符串創建表示所討論

我的問題的性質的聚合的相應數據幀的可變是我必須爲數千個變量執行此操作。

我的理解是Spark每次執行聚合時都必須「讀」主數據框。

有沒有其他方法可以更有效地做到這一點?

感謝您閱讀我的問題,並提前感謝您的幫助。

+1

您是否考慮緩存? – eliasah

回答

2

繼續並使用源數據構建DataFrame後,緩存數據幀。另外,爲避免在代碼中編寫所有查詢,請繼續將它們放入文件並在運行時傳遞該文件。在你的代碼中可以讀取你的文件,然後你可以運行你的查詢。這種方法最好的部分是你可以通過更新文件而不是應用程序來改變你的查詢。只要確保你找到一種方法來給出獨特的名字。

在PySpark中,它看起來像這樣。

dataframe = sqlContext.read.parquet("/path/to/file.parquet") 
// do your manipulations/filters 
dataframe.cache() 
queries = //how ever you want to read/parse the query file 

for query in queries: 

    output = dataframe.sql(query) 
    output.write.parquet("/path/to/output.parquet") 
相關問題