【问题标题】:Q: PySpark, how to iterate over rows in a large datafram?问:PySpark,如何迭代大型数据框中的行?
【发布时间】:2021-11-21 10:27:32
【问题描述】:

我有一个包含至少 50 万条记录的大型数据框,我需要将每个字符串转换为自定义对象(应该以对象列表结尾) collect() 不能接受,因为数据框太大。

遍历数据框中的所有行时出现问题,起初我尝试这样做(导致映射,映射到对象列表):

result_list = map(Lambda row: row, test_df.collect())

但是collect()结果是不能接受的,因为dataframe太大了。

您能否告诉我还有哪些其他选项可以遍历数据框中的每一行?

【问题讨论】:

  • 您是否尝试过创建 UDF?
  • @VladSiv 不,我可能有一个误解,但我不知道如何用 udf 解决这个问题,是否可以编写有助于将数据帧转换为列表或映射的 udf? (即使我在数据框本身中进行所有行转换,仍然存在将其放入程序输出所需的对象列表中的问题)
  • 哦,好吧,我误解了这个问题。我认为您可以只使用数据框。

标签: python dataframe pyspark


【解决方案1】:

如果您的 DataFrame 的 collect() 不适合内存,则转换后的 DataFrame 也不太可能适合。但是,如果您只需要流式传输 DataFrame 并一次处理每一行,则可以使用 test_df.rdd.toLocalIterator() 对其进行迭代。 https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.RDD.toLocalIterator.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多