我必须更改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") ...