PySpark: StructField (..., ..., False) siempre devuelve `nullable = true` en lugar de` nullable = false`
Soy nuevo en PySpark y enfrento un problema extraño. Estoy tratando de establecer alguna columna en no anulable mientras se carga un conjunto de datos CSV. Puedo reproducir mi caso con un conjunto de datos muy pequeño (test.csv
):
col1,col2,col3
11,12,13
21,22,23
31,32,33
41,42,43
51,,53
Hay un valor nulo en la fila 5, columna 2 y no quiero obtener esa fila dentro de mi DF. Configuré todos los campos como no anulables (nullable=false
) pero obtengo un esquema con las tres columnas que tienennullable=true
. ¡Esto sucede incluso si configuro las tres columnas como no anulables! Estoy ejecutando la última versión disponible de Spark, 2.0.1.
Aquí está el código:
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
struct = StructType([ StructField("col1", StringType(), False), \
StructField("col2", StringType(), False), \
StructField("col3", StringType(), False) \
])
df = spark.read.load("test.csv", schema=struct, format="csv", header="true")
df.printSchema()
devoluciones:
root
|-- col1: string (nullable = true)
|-- col2: string (nullable = true)
|-- col3: string (nullable = true)
ydf.show()
devoluciones:
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 11| 12| 13|
| 21| 22| 23|
| 31| 32| 33|
| 41| 42| 43|
| 51|null| 53|
+----+----+----+
mientras espero esto:
root
|-- col1: string (nullable = false)
|-- col2: string (nullable = false)
|-- col3: string (nullable = false)
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 11| 12| 13|
| 21| 22| 23|
| 31| 32| 33|
| 41| 42| 43|
+----+----+----+