无法覆盖从adls位置读取的ORC文件的架构



我必须更改ORC文件的模式。ORC保存在一个广告位置
orc文件中的原始架构为旧架构列标题:(C1、C2、C3、C4(
我想用新架构(从StructType和StructField创建(覆盖原始架构新架构列标题:(姓名、年龄、性别、时间(

我使用的spark命令是:val df2=spark.read.format("orc"(.schema(schema(.load("path/"(

我一运行df2.show(2,false(

所有列的数据都变为null。

当我不覆盖已经存在的旧模式并运行时

val df2=spark.read.format("orc"(.load("path/"(

我得到了数据,但列标题是C1、C2、C3和C4。

你能告诉我如何读取新模式中的数据以及为什么它不起作用吗?

提前谢谢。

为什么它不起作用?

是的,这是预期行为。假设您的源df有列c1、c2。。。等等。阅读时的.schema(...)帮助您选择某些列或强制转换它们。只有当给定列存在于源中时,这才会起作用。此选项主要适用于基于文本的格式,如csv、json、text等。

由于您将列指定为(Name,Age,Sex,Time(,并且您的源不包含这些列,因此数据为null。

你能告诉我如何读取新模式中的数据吗

正常读取文件,

val df = spark.read.format("orc").load("path/")

显式重命名列,

val df2 = df.withColumnRenamed(c1, "Name").withColumnRenamed(c2, "Age") ...

相关内容

  • 没有找到相关文章

最新更新