【问题标题】:What parameters to use to improve performance of writing dataframes to a Parquet file?使用哪些参数来提高将数据帧写入 Parquet 文件的性能?
【发布时间】:2019-12-13 03:17:48
【问题描述】:

我正在处理一些数据,而我的代码在 Parquet 文件中写入数据帧需要一分钟多的时间。数据框有大约 90000 行和 10 列。这是我第一次使用spark,所以我不确定这里的时间表现,但我认为这时间太多了。我已经阅读了一些文本以获得更好的性能写入 Parquet,但它还没有帮助。我想知道我可以使用什么类型的参数来获得更好的性能,或者我的数据是否太小,这是正常的时间。

我有一个在我的数据框日期列中迭代的 for 循环。它每天迭代并写入文件。目前在测试中,我的专栏只有一天,所以在这个for循环中只迭代了一次,执行所有其他操作大约需要10秒(其他操作的代码我没有包含在dataframe),但是当它到达这一行写入文件时,需要超过 1 分钟。

if i == 0:
    df.write.mode('overwrite').parquet(self.files['parquet'])
else:
    df.write.mode('append').parquet(self.files['parquet'])

【问题讨论】:

    标签: python performance apache-spark pyspark parquet


    【解决方案1】:

    您不需要 for 循环来保存 Spark 数据帧。做吧:

    df.write.mode('overwrite').parquet(path)
    

    【讨论】:

    • for循环是做其他操作,而不仅仅是写文件。
    • spark 使用惰性求值,这意味着在执行 action(在您的情况下为 write)之前什么都不会发生......上面将处理您的所有操作
    • 你的意思是写的时候操作正在执行吗?示例:我在写入之前在数据帧中有一些 withColumn() 方法操作,所以这些操作是在调用写入时发生的?
    • 是的,withColumn 操作将在您调用 write 时执行。此外,在大多数情况下,在 Spark 中,您永远不应该使用 for 循环,这不是 Spark 的用途。你在你的 for 循环中计算什么?
    • 是的,我必须大量改进我的代码,我正在阅读它,我必须进行一些更改以消除 for 循环。在数据框列中每天迭代之后,我正在做一些操作。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2019-07-03
    • 1970-01-01
    • 2012-04-18
    相关资源
    最近更新 更多