【问题标题】:How read the data in a spark DF when column name changes and data type changes列名更改和数据类型更改时如何读取 Spark DF 中的数据
【发布时间】:2019-10-08 21:35:03
【问题描述】:
我有一个具有以下架构的镶木地板数据,
Id:int,
Name:String
在稍后阶段,新的传入数据模式已更改为
Id:double/long,
NAME:String
- 类型改变
- 字段名称更改
我在同一个文件夹中有两个 parquet 架构数据。我如何读取 spark.read.format("parquet").load("") 中的两个架构?
任何专家的建议都会有所帮助。
【问题讨论】:
标签:
apache-spark
apache-spark-sql
parquet
【解决方案1】:
通常在这种情况下,我会创建此表的 v2 并隔离我的镶木地板文件。从技术上讲,这是两个不同的表。
如果您需要将它们重新绑定在一起,则可以创建第二层并将这两个表流式传输到一个新表中。
【解决方案2】:
在一次性场景中,建议转换数据类型并重写目标 parquet 文件。
scala> val df = Seq((1, "as"), (2, "fd")).toDF("a", "b")
df: org.apache.spark.sql.DataFrame = [a: int, b: string]
scala> df.show
+---+---+
| a| b|
+---+---+
| 1| as|
| 2| fd|
+---+---+
scala> df.withColumn("a", $"a".cast("double")).show
+---+---+
| a| b|
+---+---+
|1.0| as|
|2.0| fd|
+---+---+
如果不是那么你需要用相同的逻辑更新源系统