2017-09-14 1 views
0

einstellen Nachdem ich eine Datei (mit Spark-2.0) mit dem Schema abgeleitet lesen:Kraft spark.read() mit InferSchema = True numerische Spalten NULL-

from pyspark.sql import SparkSession 
spark = SparkSession.builder.appName('foo').getOrCreate() 

df = spark.read.csv('myData.csv', inferSchema=True) 

alle Spalten, string und numerisch, sind nullfähig.

Wenn ich jedoch die Datei mithilfe eines expliziten Schemas lese, sind nur die Spalten string nullfähig.

Gibt es eine Möglichkeit, read() mit inferSchema=True zu erzwingen, Nullgültigkeit auf dieselbe Weise wie bei einem expliziten Schema festzulegen?

Antwort

1

Nein, Sie können read() nicht zwingen, nullable auf false zu setzen, wenn Sie inferSchema verwenden. Die source code enthält die folgende Zeile:

StructField (thisHeader, dtype, nullable = true)

die explizit jede Spalte nullable auf true gesetzt, wenn inferSchema verwenden.

Daher kann nullable auf diese Weise nicht geändert werden. Die einzige Möglichkeit besteht darin, das Schema selbst anzugeben oder das Schema des Datenrahmens zu ändern, der mit inferSchema erstellt wurde.


Doch ob nullable wahr oder falsch ist oft nicht für den Benutzer keine Rolle. Aus der Antwort here; "nullable Argument ist keine Einschränkung, sondern eine Reflexion der Quelle und Typ Semantik, die bestimmte Arten der Optimierung ermöglicht".

Wenn Sie null Werte in Ihren Daten vermeiden möchten, können Sie df.dropna() oder df.fillna() verwenden.

Verwandte Themen