2017-06-25 46 views
0

用鹹菜,我想了解PySpark如何使用鹹菜RDDS,避免它SparkSql和Dataframes。這個問題的基礎是來自this鏈接的第30張幻燈片。我在下面引用它作爲參考:PySpark如何在SparkSql和Dataframes

「[PySpark] RDD通常是pickle對象的RDD,Spark SQL(和DataFrames)避免了這些」。

Spark中的Sql如何使用鹹菜?

回答

2

在原來的火花RDD模型,RDDS描述分佈式Java對象或醃漬Python對象的集合。然而,SparkSQL「數據框」(包括數據集)代表查詢針對一個或多個來源/父母。

評估查詢,併產生了一些成績,星火確實需要處理記錄和字段,但這些都是以二進制,語言無關的格式(稱爲「編碼」)內部表示。 Spark可以在需要時將這些格式解碼爲任何支持的語言(例如Python,Scala,R),但如果不明確需要,可以避免這樣做。

例如:如果我有磁盤上的一個文本文件,我想算行,我用像一個電話:

spark.read.text("/path/to/file.txt").count()

沒有必要火花不斷轉換將文本中的字節轉換爲Python字符串--Spark只需要對它們進行計數。

或者,如果我們沒有從PySpark一個spark.read.text("...").show(),然後星火需要一些記錄轉換爲Python字符串 - 但只需要那些滿足查詢,並show()意味着限制,以便只有幾個記錄被評估和「解碼」。總之,使用SQL/DataFrame/DataSet APIs,用來操縱查詢的語言(Python/R/SQL/...)僅僅是一種「前端」控制語言,它並不是語言在其中執行實際計算,也不需要將原始數據源轉換爲您正在使用的語言。這種方法可以在所有語言前端實現更高的性能。

+0

謝謝Adam。發佈編碼器的參考https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-sql-Encoder.html – user24225