'list' 对象没有属性 'foreach'
'list' object has no attribute 'foreach'
我正在尝试复制 the given code 以查看 foreach
是如何工作的,我尝试使用以下代码:
rdd = sc.parallelize([1,2,3,4,5])
def f(a):
print(a)
rdd.collect().foreach(f)
但它给出了以下错误:
AttributeError: 'list' object has no attribute 'foreach'
我理解 return 类型的 collect()
是一个 array
(这是列表)的错误,它没有与之关联的 foreach
属性但是,我不明白如果它在官方 spark 3.0.1
文档中给出,这怎么行不通。我错过了什么。我正在使用 Spark 3.0.1
rdd.collect()
是一个将数据收集到驱动程序的 Spark 操作。 collect
方法 returns 一个列表,因此如果你想打印出列表的元素,只需执行:
rdd = sc.parallelize([1,2,3,4,5])
def f(a):
print(a)
res = rdd.collect()
[f(e) for e in res]
# output
# 1
# 2
# 3
# 4
# 5
另一种方法是使用您示例中提到的另一个操作 foreach
,例如 rdd.foreach(f)
。虽然,由于 Spark 的分布式特性,无法保证 print
命令会将数据发送到驱动程序的输出流。这实质上意味着您永远看不到打印出来的这些数据。
这是为什么?因为Spark有两种部署模式,cluster
和client
模式。在集群模式下,驱动程序 运行 在集群中的任意节点中。另一方面,在客户端模式下,驱动程序 运行 在您提交 Spark 作业的机器中,因此,Spark 驱动程序和您的程序共享相同的输出流。因此,您应该始终能够看到程序的输出。
相关链接
我正在尝试复制 the given code 以查看 foreach
是如何工作的,我尝试使用以下代码:
rdd = sc.parallelize([1,2,3,4,5])
def f(a):
print(a)
rdd.collect().foreach(f)
但它给出了以下错误:
AttributeError: 'list' object has no attribute 'foreach'
我理解 return 类型的 collect()
是一个 array
(这是列表)的错误,它没有与之关联的 foreach
属性但是,我不明白如果它在官方 spark 3.0.1
文档中给出,这怎么行不通。我错过了什么。我正在使用 Spark 3.0.1
rdd.collect()
是一个将数据收集到驱动程序的 Spark 操作。 collect
方法 returns 一个列表,因此如果你想打印出列表的元素,只需执行:
rdd = sc.parallelize([1,2,3,4,5])
def f(a):
print(a)
res = rdd.collect()
[f(e) for e in res]
# output
# 1
# 2
# 3
# 4
# 5
另一种方法是使用您示例中提到的另一个操作 foreach
,例如 rdd.foreach(f)
。虽然,由于 Spark 的分布式特性,无法保证 print
命令会将数据发送到驱动程序的输出流。这实质上意味着您永远看不到打印出来的这些数据。
这是为什么?因为Spark有两种部署模式,cluster
和client
模式。在集群模式下,驱动程序 运行 在集群中的任意节点中。另一方面,在客户端模式下,驱动程序 运行 在您提交 Spark 作业的机器中,因此,Spark 驱动程序和您的程序共享相同的输出流。因此,您应该始终能够看到程序的输出。
相关链接