【发布时间】:2017-06-05 15:32:33
【问题描述】:
我有一个名为“A”的数据框,其中包含 300 多列,我正在尝试将名为“A”的数据框与其增量数据“B”与“A”的架构相同。
加入数据框后,我得到了重复的列。我是通过使用 co 来避免的
val toPrint = udf((value1: String, value2: String) => if(value1 != null) {value1} else value2)
val dfClean = df1.join(df2, df1("PERIOD_TAG") === df2("PERIOD_TAG"), "fullouter").select(toPrint(df1("PERIOD_SHORT_DESCRIPTION"),df2("PERIOD_SHORT_DESCRIPTION")).alias("PERIOD_SHORT_DESCRIPTION"),toPrint(df1("PERIOD_TAG"),df2("PERIOD_TAG")).alias("PERIOD_TAG"))....so on for all the columns
我正在调用 UDF 以在重复列中选择最新的值(来自增量文件)。 增量数据将有很少的更新数据,我需要添加增量数据帧中的所有新数据以及数据帧“B”的旧数据。
有没有其他方法可以避免单独选择列并使用 for 循环。 或者有什么方法可以在加入后获得增量df的新/更新值和数据帧“A”中不存在的数据帧“B”的旧值。
【问题讨论】:
-
它与提到的问题非常相似,但它并没有建议当没有列更多时如何解决选择问题,在我的情况下是 300+。我也想给出加入条件和顺序。
-
这肯定是不是重复的,因为列的数量超过了人们想要手写的数量。更重要的是,这种情况是分别在 left 为 null 或不为 null 时选择 right 或 left 值。我确信这比给出的副本更普遍。
标签: scala apache-spark apache-spark-sql