微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当数据包含具有两个不同数据类型的嵌套数组时,在PySpark中定义架构

如何解决当数据包含具有两个不同数据类型的嵌套数组时,在PySpark中定义架构

我正在尝试定义一个架构,以便根据当前存储在rdd中的某些数据创建一个数据框。但是rdd包含一些具有两个不同的数据类型(整数和浮点数)的数组,因此我不确定如何定义架构。

有关文件中的示例数据行

{"a":"string","b":[{"c":[[0,1.04,1.99],[1,1.03,5.26],[2,1.02,6]],"d":0.0,"e":132}]}

目前我的模式是这个

StructType([
    StructField('a',StringType(),True),StructField('b',ArrayType(
                StructType([
                    StructField('c',ArrayType(
                        ArrayType(DoubleType()
                                  ),StructField('d',DoubleType(),StructField('e',IntegerType(),])
])

但是我收到错误

DoubleType can not accept object 0 in type <class 'int'> 

...当我切换到整数类型时,反之亦然。

是否可以在PySpark中包含两个数据类型?

解决方法

我认为无法在单个数组中具有混合类型。

您可以先尝试在输入字典的'c'子列表中将所有内部数字转换为Float,然后再使用Spark读取它们。

def cast_dict(dictionary):
  for subdict in dictionary['b']:
      subdict['c'] = [list(map(float,sublist)) for sublist in subdict['c']]
  return dictionary

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。