You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@spark.apache.org by Eyck Troschke <ey...@troschke.onmicrosoft.com> on 2025/07/02 14:38:27 UTC

[PYSPARK] createDataFrame throws exception with Python 3.12.3

Dear Spark Development Community,

are their any known issues with SparkSession.createDataFrame in PySpark 4.0 with Python 3.12.3?

In my environment spark.range() and spark.read.json() work as expected, but spark.createDataFrame() throws an exception:

Example:

from pyspark.sql import Row, SparkSession

def test_df(spark: SparkSession):
    df = spark.range(5)
    df.show() # works

    df = spark.read.option("multiline", "true").json(r"\path\to\testdata.json")
    df.show() # works

    df = spark.createDataFrame([Row(a=1, b=2), Row(a=3, b=4)])
    df.show() # throws exception


My Environment:
Windows 11
Java 17
Python 3.12.3
PySpark 4.0.0

Exception:

.venv\Lib\site-packages\pyspark\sql\classic\dataframe.py:285: in show
    print(self._show_string(n, truncate, vertical))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv\Lib\site-packages\pyspark\sql\classic\dataframe.py:303: in _show_string
    return self._jdf.showString(n, 20, vertical)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv\Lib\site-packages\py4j\java_gateway.py:1362: in __call__
    return_value = get_return_value(
.venv\Lib\site-packages\pyspark\errors\exceptions\captured.py:282: in deco
    return f(*a, **kw)
           ^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

answer = 'xro74'
gateway_client = <py4j.clientserver.JavaClient object at 0x00000239DC8548F0>
target_id = 'o73', name = 'showString'

    def get_return_value(answer, gateway_client, target_id=None, name=None):
        """Converts an answer received from the Java gateway into a Python object.

        For example, string representation of integers are converted to Python
        integer, string representation of objects are converted to JavaObject
        instances, etc.

        :param answer: the string returned by the Java gateway
        :param gateway_client: the gateway client used to communicate with the Java
            Gateway. Only necessary if the answer is a reference (e.g., object,
            list, map)
        :param target_id: the name of the object from which the answer comes from
            (e.g., *object1* in `object1.hello()`). Optional.
        :param name: the name of the member from which the answer comes from
            (e.g., *hello* in `object1.hello()`). Optional.
        """
        if is_error(answer)[0]:
            if len(answer) > 1:
                type = answer[1]
                value = OUTPUT_CONVERTER[type](answer[2:], gateway_client)
                if answer[1] == REFERENCE_TYPE:
>                   raise Py4JJavaError(
                        "An error occurred while calling {0}{1}{2}.\n".
                        format(target_id, ".", name), value)
E                   py4j.protocol.Py4JJavaError: An error occurred while calling o73.showString.


Kind regards,

Eyck