2016-07-27 18 views
0

In PySpark (v1.6.2) werden beim Konvertieren einer RDD in einen DataFrame mit einem angegebenen Schema Felder, deren Werttyp nicht mit dem deklarierten Wert übereinstimmt Das Schema wird in null konvertiert.PySpark SQLContext.createDataFrame erzeugt Nullen, wenn deklarierte und tatsächliche Feldtypen nicht übereinstimmen

from pyspark import SparkContext 
from pyspark.sql import SQLContext 
from pyspark.sql.types import StructType, StructField, DoubleType 

sc = SparkContext() 
sqlContext = SQLContext(sc) 

schema = StructType([ 
    StructField("foo", DoubleType(), nullable=False) 
]) 

rdd = sc.parallelize([{"foo": 1}]) 
df = sqlContext.createDataFrame(rdd, schema=schema) 

print df.show() 

+----+ 
| foo| 
+----+ 
|null| 
+----+ 

Ist das ein PySpark Bug oder nur sehr überraschendes aber beabsichtigtes Verhalten? Ich würde entweder erwarten, dass eine TypeError ausgelöst wird oder dass die int in float kompatibel mit DoubleType konvertiert werden kann.

Antwort

2

Dies ist ein beabsichtigtes Verhalten. Siehe insbesondere die Kommentare zu corresponding part of the source:

// all other unexpected type should be null, or we will have runtime exception 
// TODO(davies): we could improve this by try to cast the object to expected type 
case (c, _) => null