py4j.Py4JException:方法splits([])不存在

时间:2017-12-27 09:43:37

标签: python apache-spark pyspark rdd py4j

执行我的火花作业时出现以下错误:

py4j.protocol.Py4JError: An error occurred while calling o191.splits. Trace:
py4j.Py4JException: Method splits([]) does not exist
        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
        at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
        at py4j.Gateway.invoke(Gateway.java:272)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:214)
        at java.lang.Thread.run(Thread.java:748)

这是我的代码:

points = df.rdd.map(lambda x: ( (x['col1'], x['col2'], x['col3']), x[i + '_func']))
points.cache()
dim = points.first()[1].size
print points._jrdd.splits().size()

最后一行抛出上面提供的异常。我该如何解决这个错误? 这段代码在Spark 1.6中运行良好。现在我正在使用Spark 2.2,我得到了这个错误。 Python的版本是2.7.12(与以前相同)。

1 个答案:

答案 0 :(得分:1)

Java中的

splits自1.1.0以来已被弃用(替换为partitions),并且根本不应该在PySpark中使用。使用getNumPartitions

points.getNumPartitions()