【发布时间】:2020-03-27 06:16:21
【问题描述】:
对于看似简单的好奇心,对于冗长的帖子表示歉意,但我想提供完整的上下文......
在 Databricks 中,我正在基于特定架构定义创建数据“行”,然后将该行插入到空数据框中(也基于相同的特定架构)。
架构定义如下所示:
myschema_xb = StructType(
[
StructField("_xmlns", StringType(), True),
StructField("_Version", DoubleType(), True),
StructField("MyIds",
ArrayType(
StructType(
[
StructField("_ID", StringType(), True),
StructField("_ID_Context", StringType(), True),
StructField("_Type", LongType(), True),
]
),
True
),
True
),
]
)
因此行条目是:
myRow = Row(
_xmlns="http://some.where.com",
_Version=12.3,
MyIds=[
Row(
_ID="XY",
_ID_Context="Exxwhy",
_Type=9
),
Row(
_ID="9152",
_ID_Context="LNUMB",
_Type=21
),
]
)
最后,databricks notebook 代码是:
mydf = spark.createDataFrame(sc.emptyRDD(), myschema_xb)
rows = [myRow]
rdf = spark.createDataFrame(rows, myschema_xb)
appended = mydf.union(rdf)
对rdf = spark.createDataFrame(rows, myschema_xb) 的调用导致异常:
ValueError: Unexpected tuple 'h' with StructType.
现在我很好奇的部分是如果我将元素 MyIds 更改为 myIds(即第一个字母小写),代码 works,以及我的新数据框(@ 987654328@) 有单行数据。
这个异常是什么意思?为什么当我更改元素的大小写时它会消失?
(仅供参考,我们的 databricks 运行时环境是 Scala 2.11)
谢谢。
【问题讨论】:
标签: python pyspark schema azure-databricks pyspark-dataframes