scala和python之间的API兼容性?

Jes*_*ose 5 apache-spark

我已经阅读了十几页文档,似乎:

  1. 我可以跳过学习scala部分

  2. API完全在python中实现(我不需要学习任何东西的scala)

  3. 交互模式与scala shell完全一样快,并且故障排除同样容易

  4. 像numpy这样的python模块仍然会导入(没有残缺的python environement)

是否存在使得不可能的空缺区域?

Jos*_*sen 8

在最近的Spark版本(1.0+)中,我们实现了下面列出的所有缺少的PySpark功能.仍然缺少一些新功能,例如GraphX的Python绑定,但其他API已实现接近奇偶校验(包括用于Spark Streaming的实验性Python API).

我之前的答案转载如下:

Spark 0.9的原始答案

自我原来的答案(在这个答案的底部再现)后的七个月里发生了很多变化:

从Spark 0.9开始,PySpark的主要缺失功能是:

尽管我们已经进行了许多性能改进,但Spark的Scala和Python API之间仍存在性能差距.Spark用户邮件列表有一个讨论其当前性能的开放线程.

如果您发现PySpark中缺少任何功能,请在我们的JIRA问题跟踪器上打开一张新票.

Spark 0.7.2的原始答案:

星火Python编程指南有缺失PySpark功能列表.从Spark 0.7.2开始,PySpark目前缺少对不同StorageLevels的sample(),sort()和持久性的支持.它还缺少一些添加到Scala API的便捷方法.

Java API在发布时与Scala API同步,但从那时起添加了许多新的RDD方法,并不是所有这些方法都已添加到Java包装器类中.有关如何使Java API保持最新的讨论,请访问https://groups.google.com/d/msg/spark-developers/TMGvtxYN9Mo/UeFpD17VeAIJ.在该主题中,我提出了一种自动查找缺失特征的技术,因此只需要花时间添加它们并提交拉取请求即可.

关于性能,PySpark将比Scala Spark慢.部分性能差异源于在使用大堆分叉进程时出现奇怪的JVM问题,但是有一个开放的pull请求应该解决这个问题.另一个瓶颈来自序列化:现在,PySpark不要求用户为其对象显式注册序列化程序(我们目前使用二进制cPickle加上一些批处理优化).在过去,我考虑添加对用户可自定义的序列化程序的支持,这些序列化程序允许您指定对象的类型,从而使用更快的专用序列化程序; 我希望在某个时候恢复这方面的工作.

PySpark是使用常规的cPython解释器实现的,因此像numpy这样的库应该可以正常工作(如果PySpark是用Jython编写的,那就不是这种情况).

开始使用PySpark非常容易; 只需下载预先构建的Spark软件包并运行pyspark解释器就足以在您的个人计算机上进行测试,并让您评估其交互功能.如果您想使用IPython,可以IPYTHON=1 ./pyspark在shell中使用IPython shell启动Pyspark.