如何解决PySpark,请使用Colomn方法多次调用数据框后避免StackOverflowException
AWS胶水 星火2.4 Python3 胶水Version2.0
使用Colomn方法多次调用数据框后,我发现了StackOverflowException。
喜欢...
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "database_name",table_name = "table_name",transformation_ctx = "datasource0")
df = datasource0.toDF()
df = df.withColumn('item_name',F.regexp_replace(F.col('item_name'),'^foo$','bar'))
df = df.withColumn('item_name','bar'))
... # and call hundreds times
文档说
Blockquote 此方法在内部引入投影。因此,例如,为了添加多个列而多次通过循环调用它会生成大型计划,这可能会导致性能问题,甚至导致StackOverflowException。为了避免这种情况,请同时对多个列使用select()。
所以我知道我需要一次对多列使用select()。
但是我不知道如何用代码编写。
解决方法
根据this是,withColumn将导致与内存相关的问题,可以通过使用如下所示的select来防止此问题:
df.select(F.regexp_replace(F.col('item_name')))
如果要对多个列应用相同的内容,则可以如下所示:
df.select(F.regexp_replace(F.col('item_name')),F.regexp_replace(F.col('item_name')),.........upto n number of columns)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。