2024-05-14 13:30:43 发布
网友
在pyspark中运行一个简单的应用程序。
f = sc.textFile("README.md") wc = f.flatMap(lambda x: x.split(' ')).map(lambda x: (x, 1)).reduceByKey(add)
我想使用foreach操作查看RDD内容:
wc.foreach(print)
这将引发语法错误:
SyntaxError: invalid syntax
我错过了什么?
如果您想查看RDD的内容,那么yes collect是一个选项,但是它会将所有数据提取到driver,这样就可能出现问题
<rdd.name>.take(<num of elements you want to fetch>)
如果你只想看看样品
运行foreach并尝试打印,我不建议这样做,因为如果您在集群上运行此操作,则打印日志将是执行器本地的,并且它将打印该执行器可访问的数据。print语句没有更改状态,因此逻辑上没有错误。要得到所有的日志,你必须做一些
**Pseudocode** collect foreach print
但这可能会导致作业失败,因为收集驱动程序上的所有数据可能会使其崩溃。我建议使用take命令,或者如果您想分析它,则使用samplecollect on driver或write to file,然后对其进行分析。
这个错误是因为print不是Python 2.6中的函数。
print
您可以定义执行打印的助手自定义项,或者使用__future__库将print视为函数:
>>> from operator import add >>> f = sc.textFile("README.md") >>> def g(x): ... print x ... >>> wc.foreach(g)
或者
>>> from __future__ import print_function >>> wc.foreach(print)
但是,我认为最好使用collect()将RDD内容带回驱动程序,因为foreach在工作节点上执行,并且输出可能不一定出现在驱动程序/shell中(它可能处于local模式,但在集群上运行时不会)。
collect()
foreach
local
>>> for x in wc.collect(): ... print x
在Spark 2.0中(我没有使用早期版本进行测试)。简单地说:
print myRDD.take(n)
其中,n是行数,myRDD是wc。
如果您想查看RDD的内容,那么yes collect是一个选项,但是它会将所有数据提取到driver,这样就可能出现问题
如果你只想看看样品
运行foreach并尝试打印,我不建议这样做,因为如果您在集群上运行此操作,则打印日志将是执行器本地的,并且它将打印该执行器可访问的数据。print语句没有更改状态,因此逻辑上没有错误。要得到所有的日志,你必须做一些
但这可能会导致作业失败,因为收集驱动程序上的所有数据可能会使其崩溃。我建议使用take命令,或者如果您想分析它,则使用samplecollect on driver或write to file,然后对其进行分析。
这个错误是因为
print
不是Python 2.6中的函数。您可以定义执行打印的助手自定义项,或者使用__future__库将
print
视为函数:或者
但是,我认为最好使用
collect()
将RDD内容带回驱动程序,因为foreach
在工作节点上执行,并且输出可能不一定出现在驱动程序/shell中(它可能处于local
模式,但在集群上运行时不会)。在Spark 2.0中(我没有使用早期版本进行测试)。简单地说:
其中,n是行数,myRDD是wc。
相关问题 更多 >
编程相关推荐