2017-08-19 74 views
0

我使用Spark SQLSpark應用程序中檢索Cassandra中的數據。數據被檢索爲DataSet。但是,我需要使用javaRDD()函數將此dataset轉換爲JavaRDD。它可以工作,但需要大約2個小時。有一些參數需要調整以提高這個時間嗎?DataSet javaRDD()性能

回答

2

Dataset APIs構建在SparkSQL引擎之上,它使用Catalyst生成優化的邏輯和物理查詢計劃。在R, Java, Scala,Python DataFrame/Dataset APIs之間,所有關係類型查詢都經歷相同的代碼優化器,從而提供空間和速度效率。鑑於Dataset[T]類型的API針對數據工程任務進行了優化,untyped Dataset[Row]DataFrame的別名)更快並且適用於交互式分析。

詳情Spark RDD vs Dataset performance

enter image description here

+0

雞蛋裏挑骨頭......數據集[行]不比數據集[T]快,因爲類型化的數據集具有明確的編碼器。如果需要解決方案的問題是一種迭代方法,不幸的是,RDD是最好的方法。儘管暴露了數據集API,但大多數SparkML算法都使用RDD,因爲ML問題通常是迭代的,Catalyst不擅長優化迭代問題。 – Garren

0

彈性分佈式數據集(RDD)是火花框架的主要抽象而火花SQL(結構化數據的處理的火花模塊)提供了火花有關的詳細信息數據和正在執行的計算的結構,因此使用這些額外的信息來執行額外的優化。

直到星火1.6,RDDS用於執行比星火SQL對應數據框(https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html)更好,但是,星火2.1升級已經取得星火SQL相當更有效率

https://i.stack.imgur.com/TmhXf.png