簡體   English   中英

如何將巨大的 CSV 加載到 Pyspark DataFrame?

[英]How to load a huge CSV to a Pyspark DataFrame?

我正在嘗試將一個巨大的基因組數據集(2504 行和 14848614 列)加載到 PySpark DataFrame,但沒有成功。 我收到java.lang.OutOfMemoryError: Java heap space 我認為使用 spark 的主要思想正是內存的獨立性......(我是新手。請耐心等待:)

這是我的代碼:

from pyspark.sql import SparkSession

spark = SparkSession.builder.config("spark.driver.memory", "6G").getOrCreate()

file_location = "1kGp3_chr3_6_10.raw"
file_type = "csv"

infer_schema = "true"
first_row_is_header = "true"
delimiter = "\t"
max_cols = 15000000 # 14848614 variants loaded

data = spark.read.format(file_type) \
  .option("inferSchema", infer_schema) \
  .option("header", first_row_is_header) \
  .option("sep", delimiter) \
  .option("maxColumns", max_cols) \
  .load(file_location)

我知道我們可以通過例如df.persist(StorageLevel.DISK_ONLY)來設置StorageLevel ,但這只有在您成功將文件加載到 DataFrame 后才有可能,不是嗎? (不確定我是否遺漏了什么)

這是錯誤:

...
Py4JJavaError: An error occurred while calling o33.load.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 1.0 failed 1 times, most recent failure: Lost task 0.0 in stage 1.0 (TID 1, localhost, executor driver): java.lang.OutOfMemoryError: Java heap space
...

謝謝!


編輯/更新:我忘了提及 CSV 的大小:70G。

這是另一個導致不同錯誤的嘗試:我嘗試使用較小的數據集(2504 行和 3992219 列。文件大小:19G),並將內存增加到"spark.driver.memory", "12G" 運行 load 方法大約 35 分鍾后,我得到:

Py4JJavaError: An error occurred while calling o33.load.
: org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of 54 tasks (1033.1 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)
    at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1889)

您的錯誤告訴您問題所在 - 您沒有足夠的內存。

使用 pyspark 的價值不是內存的獨立性,而是速度,因為(它使用 ram)、保持某些數據或操作的能力以及利用多台機器的能力。

所以,解決方案 -

1)如果可能的話,投入更多的內存。

2) 根據 CSV 文件的大小,您可能能夠也可能無法將其放入筆記本電腦或台式機的內存中。 如果是這種情況,出於速度或成本的原因,您可能需要將其放入雲實例之類的東西中。 即使在那里,您也可能找不到足夠大的機器來容納單個機器的整個內存(盡管坦率地說,考慮到亞馬遜當前針對單個內存優化(u-24tb1.metal)實例的最大值,這將是相當大的) 24,576 GiB。

在那里你看到了 pyspark 的真正力量:能夠將真正巨大的數據集加載到 ram 中並在多台機器上運行。

暫無
暫無

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

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