【问题标题】:createDataFrame (pyspark) generates a weird error (py4j error)createDataFrame (pyspark) 生成一个奇怪的错误(py4j 错误)
【发布时间】:2020-04-26 15:13:11
【问题描述】:

我写了这些简单的 4 行代码:

import pyspark
from pyspark.sql import SparkSession
spa = SparkSession.builder.getOrCreate()

spa.createDataFrame([(1,2,3)], ["count"])

但是 createDataFrame 函数会产生这个巨大的错误:

Py4JError Traceback(最近调用 最后)在 3 水疗 = SparkSession.builder.getOrCreate() 4 ----> 5 spa.createDataFrame([(1,2,3)], ["count"])

c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\pyspark\sql\session.py 在 createDataFrame(self, data, schema, samplingRatio, verifySchema) 690 其他: 691 rdd,架构 = self._createFromLocal(地图(准备,数据),架构) --> 692 jrdd = self._jvm.SerDeUtil.toJavaArray(rdd._to_java_object_rdd()) 第693章 694 df = 数据帧(jdf,self._wrapped)

c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\pyspark\rdd.py 在 _to_java_object_rdd(self) 2294 """ 2295 rdd = self._pickled() -> 2296 return self.ctx._jvm.SerDeUtil.pythonToJava(rdd._jrdd, True) 2297 2298 def countApprox(self, timeout, 置信度=0.95):

c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\pyspark\rdd.py 在 _jrdd(self) 2472
self._jrdd_deserializer,分析器)2473 python_rdd = self.ctx._jvm.PythonRDD(self._prev_jrdd.rdd(), Wrapped_func, -> 2474 self.preservesPartitioning) 2475 self._jrdd_val = python_rdd.asJavaRDD() 2476

c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\py4j\java_gateway.py 在 call(self, *args) 1523 回答 = self._gateway_client.send_command(command) 1524
return_value = get_return_value( -> 1525 answer, self._gateway_client, None, self._fqn) 1526 1527 for temp_args in temp_args:

c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\pyspark\sql\utils.py 装饰中(*a,**kw) 61 def deco(*a, **kw): 62 尝试: ---> 63 返回 f(*a, **kw) 64 除了 py4j.protocol.Py4JJavaError 作为 e: 65 秒 = e.java_exception.toString()

c:\users\hp\appdata\local\programs\python\python37\lib\site-packages\py4j\protocol.py 在 get_return_value(answer, gateway_client, target_id, name) 第330章 331 “调用 {0}{1}{2} 时出错。跟踪:\n{3}\n”。 --> 332 格式(target_id, ".", name, value)) 333 其他: 第334章

> Py4JError: 调用时出错 None.org.apache.spark.api.python.PythonRDD。跟踪:py4j.Py4JException: 构造函数 org.apache.spark.api.python.PythonRDD([class org.apache.spark.rdd.ParallelCollectionRDD,类 org.apache.spark.api.python.PythonFunction,类 java.lang.Boolean]) 不存在于 py4j.reflection.ReflectionEngine.getConstructor(ReflectionEngine.java:179) 在 py4j.reflection.ReflectionEngine.getConstructor(ReflectionEngine.java:196) 在 py4j.Gateway.invoke(Gateway.java:237) 在 py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80) 在 py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69) 在 py4j.GatewayConnection.run(GatewayConnection.java:238) 在 java.lang.Thread.run(Thread.java:748)

为什么会这样?该代码实际上与其他教程相同,并且在那里运行良好......

【问题讨论】:

标签: python dataframe apache-spark pyspark py4j


【解决方案1】:

试试这个它的工作。在初始化时在值后放置一个逗号。

import pyspark
from pyspark.sql import SparkSession

spa = SparkSession.builder.getOrCreate()
df = spa.createDataFrame(sc.parallelize([(1,), (2,), (3,)]), ("count",),)

输出:

+-----+
|count|
+-----+
|    1|
|    2|
|    3|
+-----+

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2012-12-29
    • 2010-11-17
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多