什么是可以传递给SparkContext.parallelize
来创建RDD的元素的限制?更具体地说,如果我使用Python创建自定义类,那么需要实现哪些方法才能确保它在RDD中正常工作?我假设它需要实施__eq__
和__hash__
并且可以分拣。还有什么?有关文件的链接将不胜感激。我无法找到任何地方。什么样的对象可以是Spark RDD中的元素?
1
A
回答
1
严格地说,唯一的硬性要求是类是可序列化的(可挑选的),尽管对于生命周期仅限于单个任务(既不混洗也不收集/并行化)的对象来说不是必需的。
一致__hash__
和__eq__
仅需要如果类将(在byKey
操作作为密钥)被用作混洗键,直接或间接地(例如,用于distinct
或cache
)。
此外,类定义必须可以在每个工作节点上导入,因此模块必须已经存在于PYTHONPATH
或pyFiles
中。如果类依赖于本地依赖关系,那么它们也必须存在于每个工作节点上。
最后,对于排序类型,必须使用标准Python语义进行定制。
总结:
无特殊要求,除了被导入的:
class Foo: ... # objects are used locally inside a single task rdd.map(lambda i: Foo(i)).map(lambda foo: foo.get(i))
必须是可序列化:
# Has to be pickled to be distributed sc.parallelize([Foo(1), Foo(2)]) # Has to be pickled to be persisted sc.range(10).map(lambda i: Foo(i)).cache() # Has to be pickled to be fetched to the driver sc.range(10).map(lambda i: Foo(i)).collect() # take, first, etc.
必须是
Hashable
:# Explicitly used as a shuffle key sc.range(10).map(lambda i: (Foo(i), 1)).reduceByKey(add) # *byKey # Implicitly used as a shuffle kye sc.range(10).map(lambda i: Foo(i)).distinct # subtract, etc.
此外,所有通过闭包传递的变量都必须是可序列化的。
相关问题
- 1. lxml.Element对象的Spark Python RDD?
- 2. Spark Streaming DStream元素vs RDD
- 3. 比较RDD对象-Apache Spark
- 4. 在RDD中查找元素Spark
- 5. 在Apache Spark中缓存RDD的目的是什么?
- 6. 这是什么工具栏样式的可可UI元素?
- 7. 像Spark中现有的RDD一样分配新的RDD?
- 8. 这是什么样的对象树?
- 9. JSF FileUploadEvent getSource是什么样的对象?
- 10. 将RDD的每个元素添加到Spark Scala中另一个RDD的每个元素。
- 11. 将Spark RDD中的元素互相相加
- 12. 为什么Spark SQL UDF比RDD慢?
- 13. 什么是元素的问题对齐
- 14. 什么是“无内容样式元素”?
- 15. 其他RDD中的Java Spark RDD?
- 16. 使用数组对象计算Spark RDD中的不同文本
- 17. Spark中的metastore是什么?
- 18. 订购RDD元素的最佳方式Apache Spark
- 19. 查询基于Spark RDD元素的Ignite Cache
- 20. Spark Spark RDD中的字符串替换
- 21. 是否有可能将apache点燃rdd转换为scala中的spark rdd
- 22. 是否可以定义覆盖Manifest中的元素样式?
- 23. Spark:为什么我的UDF没有在rdd映射中调用?
- 24. spark中的转换和rdd函数有什么区别?
- 25. 什么是可以产生事件的对象的术语?
- 26. Lua中对象的“引用”是什么样的?
- 27. 如何提高spark rdd的可读性?
- 28. Apache-Spark:什么是map(_._ 2)的简写?
- 29. 为什么元素创建需要DOM中的文档对象?
- 30. 是否可以将Firebase JSON传递给JavaScript对象?怎么样?
非常好,谢谢! –