Pyspark'NoneType'对象没有属性''u jvm'

2024-06-01 10:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用spark2.2打印数据帧中每个分区的元素总数

from pyspark.sql.functions import *
from pyspark.sql import SparkSession

def count_elements(splitIndex, iterator):
    n = sum(1 for _ in iterator)
    yield (splitIndex, n)

spark = SparkSession.builder.appName("tmp").getOrCreate()
num_parts = 3
df = spark.read.json("/tmp/tmp/gon_s.json").repartition(num_parts)
print("df has partitions."+ str(df.rdd.getNumPartitions()))
print("Elements across partitions is:" + str(df.rdd.mapPartitionsWithIndex(lambda ind, x: count_elements(ind, x)).take(3)))

上面的代码一直失败,错误如下

  n = sum(1 for _ in iterator)
  File "/home/dev/wk/pyenv/py3/lib/python3.5/site-packages/pyspark/python/lib/pyspark.zip/pyspark/sql/functions.py", line 40, in _
    jc = getattr(sc._jvm.functions, name)(col._jc if isinstance(col, Column) else col)
AttributeError: 'NoneType' object has no attribute '_jvm'

删除下面的导入后

^{pr2}$

代码运行良好

skewed_large_df has partitions.3
The distribution of elements across partitions is:[(0, 1), (1, 2), (2, 2)]

是什么导致了这个错误?我如何修复它?在


Tags: infromimportdfsqlcountcolelements
1条回答
网友
1楼 · 发布于 2024-06-01 10:43:20

这是why you shouldn't use ^{}的一个很好的例子。在

线

from pyspark.sql.functions import *

将把pyspark.sql.functions模块中的所有函数引入到您的命名空间中,包括一些将隐藏您的内置函数的函数。在

具体问题在count_elements函数的行上:

^{pr2}$

您本打算调用__builtin__.sum,但是import *隐藏了内置项。在

相反,请执行以下操作之一:

import pyspark.sql.functions as f

或者

from pyspark.sql.functions import sum as sum_

相关问题 更多 >