Spark 和 PySpark 之间是不是存在功能奇偶校验

Posted

技术标签:

【中文标题】Spark 和 PySpark 之间是不是存在功能奇偶校验【英文标题】:Does feature parity exist between Spark and PySparkSpark 和 PySpark 之间是否存在功能奇偶校验 【发布时间】:2015-10-06 22:07:05 【问题描述】:

我听到一个常见的主题,我应该只在 Spark (1.5.1) 上的 Scala 中进行认真的编程。真正的超级用户使用 Scala。据说 Python 非常适合分析,但最终代码应写入 Scala 以完成。我听到的原因有很多:

    Spark 是用 Scala 编写的,因此总是比基于它的任何其他语言实现都要快。 与 Python API 相比,Spark 版本总是更倾向于为 Scala API 提供更多可见和启用的功能。

上面的说法有道理吗?我有点怀疑。

谢谢

【问题讨论】:

我不明白你的问题。很明显,在 Spark 上唯一值得考虑的语言是 Clojure。这不是 Haskell,但我们都必须妥协,不是吗?更不用说除了严肃之外的任何类型的编程都应该被禁止:) 说真的,尽管我投票结束这个问题。 1. 脱离 JVM 需要一些开销。这是否意味着您的程序会变慢?也许。这取决于上下文。 2. 是的,新特性首先出现在 Scala API 中。由于内部限制,有些可能永远不会在 Python 中引入。除此之外,这里没有好的答案。 我不明白你为什么要关闭它。我正在询问 Scala 获得比 PySpark 更多功能的观点。是否有证据表明 Spark 中的 Scala API 有此政策? 证据很简单——Spark源码。这绝对不是一个策略,但 PySpark API 的每个部分都需要围绕 Scala API 的包装器或在现有 Python API 之上的单独实现。关于内部限制。这是一个例子:***.com/q/31684842/1560062。为什么投票关闭?因为在我看来,这是接近 Scala vs Python 完全没有意义的讨论。 【参考方案1】:

无论您是在 Scala、Pyspark 还是 Java 中运行 Spark Dataframe API,它的性能都是一样的。但是,RDD API 在 Scala 中的运行速度比在 Pyspark 上快得多

Databricks 在 Spark 中的一些 recent performance improvements 上有一篇非常好的帖子。

Scala API 肯定会首先获得更多测试和更多新功能,但新功能并非总是仅在 Scala 或 Java 中可用。

就我个人而言,我认为学习足够多的 Scala 所需的努力是值得的 - 您无需成为 Scala 专家即可获得在 Spark 中使用它的好处。

【讨论】:

无论您是在 Scala、Pyspark 中运行 Dataframe API,其性能都相同 - 只有当您不使用 UDF 和 UDT 时才会如此。 没错,你用 Python 编写的任何不调用数据帧 API 的代码都会像普通 Python 一样慢,无论是 UDF + UDT 还是字符串操作等。 这并不意味着它会比 Scala (***.com/a/32471016/1560062) 慢,但使用 PySpark 会增加另一层复杂性,这通常隐藏得很好,但在你最不期望的时候它会咬你:)

以上是关于Spark 和 PySpark 之间是不是存在功能奇偶校验的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark:通过检查值是不是存在来聚合数据(不是计数或总和)

Spark (PySpark) 文件已存在异常

Spark Python提交错误:文件不存在:pyspark.zip

与使用 Pyspark 的另一个表相比,检查数据框中是不是存在重复项 [重复]

计算两列之间的不同集,同时使用 agg 函数 Pyspark Spark Session

pyspark在spark sql中函数之间的使用范围