Apache Spark ValueError:无法从架构中分析数据类型,无法分析数据类型:interval year

8wigbo56  于 10个月前  发布在  Apache
关注(0)|答案(1)|浏览(108)

我们在Spark 3.2中使用数据类型依赖逻辑。对于interval year数据类型,DataFrame方法schemadtypes似乎不起作用。
没有interval year类型列,这些方法工作得很好:

df1 = spark.range(1)

df1.printSchema()
# root
#  |-- id: long (nullable = false)

print(df1.schema)
# StructType(List(StructField(id,LongType,false)))

print(df1.dtypes)
# [('id', 'bigint')]

字符串
但是当我添加一个新列时,schemadtypes方法开始抛出解析错误:

df2 = df1.withColumn('col_interval_y', F.expr("INTERVAL '2021' YEAR"))

df2.printSchema()
# root
#  |-- id: long (nullable = false)
#  |-- col_interval_y: interval year (nullable = false)

print(df2.schema)
# ValueError: Unable to parse datatype from schema. Could not parse datatype: interval year

print(df2.dtypes)
# ValueError: Unable to parse datatype from schema. Could not parse datatype: interval year


为了让我们的逻辑工作,我们需要访问一个框架的列数据类型。我们如何在Spark 3.2中访问interval year类型?(Spark 3.5不会抛出错误,但我们还不能使用它)

b1zrtrql

b1zrtrql1#

我发现可以使用底层的_jdf
以下代码重新创建了dtypes的结果:

jdtypes = [(x.name(), x.dataType().typeName()) for x in df2._jdf.schema().fields()]
print(jdtypes)
# [('id', 'long'), ('col_interval_y', 'interval year')]

字符串

相关问题