[英]Create parquet file directory from CSV file in R
我遇到越來越多的情況,我需要在 R 中使用內存不足 (OOM) 方法進行數據分析。 我熟悉其他 OOM 方法,例如sparklyr
和DBI
,但我最近遇到了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.