为啥此 python 代码在 pyspark 中有效,但在 spark-submit 中无效?

Posted

技术标签:

【中文标题】为啥此 python 代码在 pyspark 中有效,但在 spark-submit 中无效?【英文标题】:Why does this python code work in the pyspark but not in spark-submit?为什么此 python 代码在 pyspark 中有效,但在 spark-submit 中无效? 【发布时间】:2016-01-28 18:47:29 【问题描述】:

我对 python 相当缺乏经验,并且在运行一些代码时遇到了麻烦。

counts = key:len(list(group)) for key, group in it.groupby(sorted(topics))

该行将以pyspark(交互模式)运行,但如果我尝试spark-submit,我会得到SyntaxError 异常。以下代码是等效的,并且在两种情况下都可以运行:

counts = 
for key, group in it.groupby(sorted(topics)):
    counts[key] = len(list(group))

谁能告诉我为什么第一个代码在 spark-submit 中不起作用。如果有所不同,则代码将在函数 1 选项卡中执行。

我使用字典理解得到的异常:

Traceback (most recent call last):
  File "./sessions.py", line 24, in <module>
    execfile("./sessionSearch.py")
  File "./sessionSearch.py", line 50
    counts = poop:len(list(group)) for poop, group in it.groupby(sorted(topics))
                                      ^
SyntaxError: invalid syntax

【问题讨论】:

请说明您遇到的具体语法错误。 【参考方案1】:

您的集群运行 Python 2.6,它不支持字典理解语法。

要么使用生成器表达式加上dict() 函数(请参阅Alternative to dict comprehension prior to Python 2.7),要么使用configure your cluster to deploy Python 2.7。

使用dict() 您的线路将是:

counts = dict((key, len(list(group))) for key, group in it.groupby(sorted(topics)))

【讨论】:

以上是关于为啥此 python 代码在 pyspark 中有效,但在 spark-submit 中无效?的主要内容,如果未能解决你的问题,请参考以下文章

在 zeppelin 中使用从 %pyspark 到 %python 的 Dataframe

使用python对pyspark代码进行单元测试

为啥要在 PySpark 中导入熊猫?

为啥运行 pandas_udf 时 Pyspark 失败?

当 python 函数比它们快时,为啥我们使用 pyspark UDF? (注。不用担心 spark SQL 命令)

PySpark 中是不是有 .any() 等价物?