我有一个制表符分隔的文件,其中包含
id1 name1 ['a', 'b'] 3.0 2.0 0.0 1.0
也就是说,一个id、一个名称、一个包含一些字符串的列表和一系列4个float属性。 我把这个文件读作
^{pr2}$我给出的模式是
schema = StructType([
StructField('id', StringType(), True),
StructField('name', StringType(), True),
StructField('list', ArrayType(StringType()), True),
StructField('att1', FloatType(), True),
StructField('att2', FloatType(), True),
StructField('att3', FloatType(), True),
StructField('att4', FloatType(), True)
])
问题是,从数据帧上的collect
判断,列表和属性都不能正确读取。事实上,我得到了None
:
Row(id=u'id1', brand_name=u'name1', list=None, att1=None, att2=None, att3=None, att4=None)
我做错什么了?在
这本书读得很好,只是不像你所期望的那样有效。Schema参数声明了是什么类型,以避免昂贵的模式推断,而不是如何转换数据。提供与声明的架构匹配的输入是您的责任。在
这也可以由数据源来处理(看一下
spark-csv
和inferSchema
选项)。但它不能处理像数组这样的复杂类型。在由于您的架构基本上是平面的,并且您知道类型,因此可以尝试如下操作:
并使用字符串处理函数或UDF分别处理复杂类型。或者,由于您无论如何都是用Python读取数据的,所以只需在创建DF之前强制执行所需的类型。在
相关问题 更多 >
编程相关推荐