Dataframe 查看进度,而不是;迭代;数据帧上

Dataframe 查看进度,而不是;迭代;数据帧上,dataframe,apache-spark,plsql,pyspark,progress-bar,Dataframe,Apache Spark,Plsql,Pyspark,Progress Bar,我想知道是否有更好的方法来查看Pyspark是否正在取得进展(在编写PL/sqldb时)。 当前,我在代码运行时看到的唯一输出是: 使用Spark的默认log4j配置文件:org/apache/Spark/log4j-defaults.properties 将默认日志级别设置为“警告”。 要调整日志记录级别,请使用sc.setLogLevel(newLevel)。对于SparkR,使用setLogLevel(newLevel)。 19/09/17 16:33:17警告JdbcUtils:请求的隔

我想知道是否有更好的方法来查看Pyspark是否正在取得进展(在编写PL/sqldb时)。 当前,我在代码运行时看到的唯一输出是:

使用Spark的默认log4j配置文件:org/apache/Spark/log4j-defaults.properties 将默认日志级别设置为“警告”。 要调整日志记录级别,请使用sc.setLogLevel(newLevel)。对于SparkR,使用setLogLevel(newLevel)。 19/09/17 16:33:17警告JdbcUtils:请求的隔离级别1不受>支持;退回到默认隔离级别2
[第三阶段:=========================>(1+1)/2]

根据数据帧的大小,这将在1分钟到1小时内保持不变。通常我会使用ProgesBar2或自己制作一个计数器。但是Spark的工作原理不同,并且不以经典的方式“迭代”,因此我不能用progressbar2库包装udf

问题是,很难看出我的程序是运行在一个大的数据帧上,还是有人忘记提交SQL DB。因为,当Pyspark等待提交时,它看起来是一样的。你可能猜到了,我在那里浪费了很多时间

df_c = df_a.withColumn("new_col", my_udf(df_b["some_col"]))
在执行此步骤时,很高兴看到pyspark取得了一些进展。

您可以查看您的Spark群集当前正在执行的操作。在这里,您可以检查Spark任务是否正在完成,或者是否一切都挂起。Spark UI的默认URL是http://:4040


如果您需要更结构化的数据(例如用于自动处理),可以使用Spark UI。

我不能100%确定您的问题是什么。似乎您正在尝试将数据帧写入PSQL DB。如果数据库上已经有一个带有锁的请求,如果相关的话,您可以尝试在任何spark Manipulation(请参阅)之前杀死空闲请求(未限制的请求)。否则,spark将永远“松弛”,等待DB锁结束。如果可以的话,尽量避免UDF,因为它会破坏pyspark的性能(或者在scala中实现UDF),spark将永远“松懈”,是的,这正是我想要防止的。除了观察pyspark的进展之外,我还没有看到另一种方式来判断情况是否如此。这主要是由于我们中的一个人忘记提交。在写入postgresql之前,只需杀死或回滚处于空闲状态的现有请求。那么你在写作上就不会有任何问题了。无法从spark日志中判断发生了什么,因为spark ends上的一切都正常工作:它只是等待在写入之前删除表锁。感谢您的提示,spark浏览器界面确实很有用,但是如果PySpark显式地告诉我它正在等待另一个用户提交,那就太好了。我不知道jdbc客户机(PySpark或任何其他客户机)如何判断数据库是否正在忙于检索数据,或者查询是否被另一个事务阻塞。也许你可以试着和他们一起玩