Joh*_*nyS 7 partitioning mapreduce apache-spark pyspark
如何处理无法使用传递给 pyspark 中的 mapPartitions() 的函数内的 print 语句调试代码的问题?
考虑这个例子:
def func(kv_iterator):
for key, value in iterator:
#do fancy stuff
print('This print statement does not reach the driver program')
return [result]
result = someRdd.mapPartitions(func)
Run Code Online (Sandbox Code Playgroud)
在 func 内部,我想对可迭代和索引进行大量工作,但我可以测试我的代码,而无需在 func 内部使用过多的变量。
是否可以以某种方式将打印语句从一个分区重定向到我的驱动程序/输出通道?
您可以使用以下其中一项:
local
模式。所有输出都应该在控制台中可见。如果不是,您的代码可能永远不会执行 - try result.count()
、result.foreach(lambda _: None)
或其他操作 - 这可能是这里的问题。将 stdout(如果需要,还可以将 stderr)重定向到文件。对于基本prints
使用file
参数:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Run Code Online (Sandbox Code Playgroud)使用远程调试器 -如何在调试模式下调用 pyspark?
但最重要的是——在 Spark 之外测试功能。与函数一起使用的函数mapPartitions
应该是accept Iterable
(具体实现通常是itertools.chain
)和return Iterable
。
归档时间: |
|
查看次数: |
1939 次 |
最近记录: |