我必須使用Spark將HDFS中的CSV文件加載到DataFrame
中。我想知道是否有一個由CSV文件支持的DataFrame與由實木複合地址文件支持的DataFrame有「性能」提升(查詢速度)?是否比基於Parquet的基於CSV的Spark DataFrame更快地查詢?
通常,我將如下所示的CSV文件加載到數據框中。
val df1 = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("hdfs://box/path/to/file.csv")
在另一方面,加載拼花文件(假設我已經分析的CSV文件,創建的模式,並將其保存到HDFS)如下所示。
val df2 = sqlContext.read.parquet("hdfs://box/path/to/file.parquet")
現在我想知道是否像下面的查詢時間的操作會受到影響和/或不同。
- df1.where( 「COL1 = 'some1'」)。COUNT()
- df1.where( 「COL1 = 'some1' 和COL2 = 'some2'」)。COUNT()
我想知道如果有人知道是否有拼花地板的謂詞下推?
對我來說,似乎鑲木地板有點像一個倒排索引,並且可以預計,基於鑲木地板的數據框的簡單過濾器比CSV上的簡單過濾器要快。至於CSV支持的數據框,我會想象每次我們篩選項目時都必須進行全面的數據集掃描。
讚賞有關CSV與實木複合支持的數據框查詢性能的任何說明。此外,任何有助於加快數據幀查詢計數的文件格式也是受歡迎的。
永遠不會,'parquets'更高效,因爲它們是通過'column'明智存儲的,並且還有其他因素。根據我自己的經驗,最好將數據集作爲csv讀取,然後將其保存爲實木複合地板,然後從中讀取它。 –
@AlbertoBonsanto也許你應該回答。 「永不」是一個非常強大的詞,但通常。 JaneWayne Yup,它支持下推,雖然根據版本有一些限制,特別是在使用嵌套對象時。提示:分區,分區和排序。 – zero323
由於以下幾個主要原因,CSV將比實木複合地板更慢:1)CSV是文本,需要逐行解析(比JSON更好,比實木複合地板差) 2)指定「inferSchema」會使CSV性能更糟,因爲inferSchema將不得不讀取整個文件_只是爲了弄清楚模式應該看起來像什麼 3)1個用GZIP壓縮的大型CSV文件不會被分割,所以只有1個執行者必須完成所有工作 4)parquet是列面向對象,因此對列進行過濾將直接影響實木複合地板的使用效果 5)壓實鑲木地板中的柱和塊 – Garren