簡體   English   中英

從 R 中的 CSV 文件創建 parquet 文件目錄

[英]Create parquet file directory from CSV file in R

我遇到越來越多的情況,我需要在 R 中使用內存不足 (OOM) 方法進行數據分析。 我熟悉其他 OOM 方法,例如sparklyrDBI ,但我最近遇到了arrow並想進一步探索它。

問題是我通常使用的平面文件足夠大,以至於在沒有幫助的情況下無法將它們讀入 R。 因此,理想情況下,我更喜歡一種進行轉換的方法,而無需首先將數據集讀入 R。

您能提供的任何幫助將不勝感激!

arrow::open_dataset()可以處理文件目錄並查詢它們,而無需將所有內容讀入 memory。 如果您確實想將數據重寫到多個文件中,可能由數據中的一列或多列分區,您可以將數據集 object 傳遞給write_dataset()

一個(臨時)警告:從 {arrow} 3.0.0 開始, open_dataset()只接受一個目錄,而不是單個文件路徑。 我們計划在下一個版本中接受單個文件路徑或離散文件路徑列表(請參閱問題),但現在如果您只需要讀取包含其他非數據文件的目錄中的單個文件,您將需要將其移動/符號鏈接到一個新目錄並打開它。

你可以這樣做:

library(arrow)
library(dplyr)
 
csv_file <- "obs.csv"
dest <- "obs_parquet/" 

sch = arrow::schema(checklist_id = float32(),
                    species_code = string())

csv_stream <- open_dataset(csv_file, format = "csv", 
                           schema = sch, skip_rows = 1)

write_dataset(csv_stream, dest, format = "parquet", 
              max_rows_per_file=1000000L,
              hive_style = TRUE,
              existing_data_behavior = "overwrite")

在我的情況下(56GB csv 文件),我對生成的鑲木地板表有一個非常奇怪的情況,因此請仔細檢查您的鑲木地板表以發現原始 csv 中不存在的任何時髦的新行。 我提交了一份關於它的錯誤報告:

https://issues.apache.org/jira/browse/ARROW-17432

如果您也遇到同樣的問題,請使用 Python 箭頭庫將 csv 轉換為 parquet,然后將其加載到 R。 該代碼也在 Jira 票證中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM