2016-04-13 11 views
2

için RDD dönüştürülür ve ben istisna aşağıdaki almak zaman "türü için şemadan anlaması olamaz" örnek: türü için şemadan anlaması olamaz:</p> <p>: Ben kıvılcımla Dataframe için RDD tarafından dönüştürmek çalıştığınızda DataFrame

>> rangeRDD.take(1).foreach(println) 
(301,301,10) 
>> sqlContext.inferSchema(rangeRDD) 
Can not infer schema for type: <type 'unicode'> 

Herhangi bir işaretçi nasıl düzeltilir? Hatta sqlContext.createDataFrame şema (RDD, şema)

schema = StructType([ 
StructField("x", IntegerType(), True), 
StructField("y", IntegerType(), True), 
StructField("z", IntegerType(), True)]) 
df = sqlContext.createDataFrame(rangeRDD, schema) 
print df.first() 

kendimi enjekte çalıştı ama çalışma zamanı hatası bitti 'ValueError: Beklenmedik tuple u' (301,301,10)

cevap

2

deneyin ayrıştırma 'StructType ile' veriler ilk olarak

>>> rangeRDD = sc.parallelize([ u'(301,301,10)']) 
>>> tupleRangeRDD = rangeRDD.map(lambda x: x[1:-1]) \ 
...      .map(lambda x: x.split(",")) \ 
...      .map(lambda x: [int(y) for y in x]) 
>>> df = sqlContext.createDataFrame(tupleRangeRDD, schema) 
>>> df.first() 
Row(x=301, y=301, z=10)