【发布时间】:2020-01-18 11:25:41
【问题描述】:
我想知道是否有更好的方法来查看 Pyspark 是否正在取得进展(在写入 PL/SQL DB 时)。 目前,当我的代码运行时,我看到的唯一输出是:
使用 Spark 的默认 log4j 配置文件:org/apache/spark/log4j-defaults.properties 将默认日志级别设置为“WARN”。 要调整日志记录级别,请使用 sc.setLogLevel(newLevel)。对于 SparkR,使用 setLogLevel(newLevel)。 19/09/17 16:33:17 WARN JdbcUtils:不支持请求的隔离级别 1;回退到默认隔离级别 2
【第三阶段:==============================> (1 + 1) / 2]
这将在 1 分钟到 1 小时内保持不变,具体取决于数据框的大小。通常我会使用 progessbar2 或自己制作一个计数器。但是 Spark 的工作方式不同,并且不会“迭代”经典方式,所以我不能用 progressbar2 库包装 udf。
问题是,很难看出我的程序是否只是在大型数据帧上运行,或者有人忘记了提交到 SQL DB。因为,当 Pyspark 等待提交时,它看起来是一样的。所以你可能已经猜到了,我在那里浪费了很多时间。
df_c = df_a.withColumn("new_col", my_udf(df_b["some_col"]))
很高兴看到 pyspark 在执行此步骤时取得了一些进展。
【问题讨论】:
-
我不能 100% 确定您的问题是什么。您似乎正在尝试将数据框写入 PSQL DB。如果您的数据库上已经有一个锁定请求,您可以尝试在任何火花操作之前终止空闲请求(未提交的请求)(请参阅stackoverflow.com/a/45548966/9435099)(如果相关)。否则,spark 将永远“松弛”,等待 DB 锁结束。如果可以的话,尽量避免使用 UDF,因为它会破坏 pyspark 的性能(或在 scala 中实现你的 udf)
-
spark 将永远“松懈”,是的,这正是我想要防止的。除了观察 pyspark 的进展之外,我还没有看到另一种方式来判断是否是这种情况。这主要是由我们中的一个人忘记承诺造成的。
-
在写入 postgresql 之前,只需终止或回滚具有空闲状态的现有请求。那么你写作不会有任何问题。并且没有办法从你的 spark 日志中知道发生了什么,因为一切都在 spark 端正常工作:它只是在等待表锁在写入之前被删除。
标签: dataframe apache-spark plsql pyspark progress-bar