Spark SQL - createDataFrame错误的struct schema-问答-阿里云开发者社区-阿里云

开发者社区> 社区小助手> 正文

Spark SQL - createDataFrame错误的struct schema

2018-12-12 11:33:12 2616 1

尝试使用Spark SQL创建DataFrame时,通过传递一个行列表,如下所示:

some_data = [{'some-column': [{'timestamp': 1353534535353, 'strVal': 'some-string'}]},

         {'some-column': [{'timestamp': 1353534535354, 'strVal': 'another-string'}]}]

spark.createDataFrame([Row(**d) for d in some_data]).printSchema()
生成的DataFrame架构是:

root
|-- some-column: array (nullable = true)
| |-- element: map (containsNull = true)
| | |-- key: string
| | |-- value: long (valueContainsNull = true)
这个模式是错误的,因为strVal列是string类型的(实际上收集此DataFrame将导致nulls此列)。

我期望模式是Array合适的Structs- 通过对值的类型的一些Python反射推断。为什么不是这样?除了在这种情况下明确提供架构之外,我还能做些什么吗?

取消 提交回答
全部回答(1)
  • 社区小助手
    2019-07-17 23:20:04

    要使用结构,您应该使用嵌套Rows(namedtuples通常是首选,但需要有效的名称标识符):

    from pyspark.sql import Row

    Outer = Row("some-column")
    Inner = Row("timestamp", "strVal")

    spark.createDataFrame([

    Outer([Inner(1353534535353, 'some-string')]),
    Outer([Inner(1353534535354, 'another-string')])

    ]).printSchema()
    root
    |-- some-column: array (nullable = true)
    | |-- element: struct (containsNull = true)
    | | |-- timestamp: long (nullable = true)
    | | |-- strVal: string (nullable = true)
    根据您目前的结构,可以使用中间JSON实现方案结果:

    import json

    spark.read.json(sc.parallelize(some_data).map(json.dumps)).printSchema()
    root
    |-- some-column: array (nullable = true)
    | |-- element: struct (containsNull = true)
    | | |-- strVal: string (nullable = true)
    | | |-- timestamp: long (nullable = true)
    或显式模式:

    from pyspark.sql.types import *

    schema = StructType([StructField(

    "some-column", ArrayType(StructType([
        StructField("timestamp", LongType()), 
        StructField("strVal", StringType())])

    ))])

    spark.createDataFrame(some_data, schema)
    虽然最后一种方法可能不完美。

    0 0
相关问答

4

回答

Spark 【问答合集】

社区小助手 2019-05-29 14:13:40 123763浏览量 回答数 4

10

回答

【精品问答合集】Hbase热门问答

hbase小能手 2019-05-29 14:37:26 120282浏览量 回答数 10

38

回答

[@饭娱咖啡][¥20]对于慢sql有没有什么比较实用的诊断和处理方法?

江小白太白 2018-10-30 18:47:38 141687浏览量 回答数 38

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146811浏览量 回答数 22

5

回答

java.lang.UnsupportedOperationException: This is supposed to be overridden by subclasses.

迷茫君 2019-07-16 09:26:11 118495浏览量 回答数 5

2

回答

mySQL数据库报错You have an error in your SQL syntax

落地花开啦 2016-02-14 16:09:24 126814浏览量 回答数 2

8

回答

flink sql 支持checkpoints吗?

游客izljdlkgbdwfc 2019-07-10 17:46:37 121199浏览量 回答数 8

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 135600浏览量 回答数 42

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 302640浏览量 回答数 249

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 471568浏览量 回答数 24
+关注
社区小助手
社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。
12
文章
824
问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载