Spark Union 与使用 lit in spark 添加列

Posted

技术标签:

【中文标题】Spark Union 与使用 lit in spark 添加列【英文标题】:Spark Union vs adding columns using lit in spark 【发布时间】:2021-01-21 01:24:12 【问题描述】:

这是一个火花相关的问题。我必须将静态数据添加到各种类型的记录中,每种类型的记录都作为不同的数据帧处理(比如 df1、df2、.. df6) 我打算添加的静态数据必须与所有 6 个数据帧重复。

什么是更高效的方式:

    对于 6 个数据帧中的每一个,使用:
    .witColumn("testA", lit("somethingA"))
    .witColumn("testB", lit("somethingB"))
    .witColumn("testC", lit("somethingC"))

    创建一个新的 DF,比如 staticDF,其中包含我打算附加到 6 个数据帧中的每一个的所有列并使用联合?

还有其他我没有考虑过的选择吗?

【问题讨论】:

【参考方案1】:

第一种方法是正确的。第二种方法行不通,因为联合将行添加到数据框,而不是列。

另一种方法是使用select同时选择所有新列:

df2 = df.select(
    '*',
    lit('somethingA').alias('testA'),
    lit('somethingB').alias('testB'),
    lit('somethingC').alias('testC')
)

【讨论】:

您如何看待仅包含文字值的广播数据帧的连接? @mike 我猜它最终会对此进行优化......但我想对于这个微不足道的操作来说性能并不是什么大问题

以上是关于Spark Union 与使用 lit in spark 添加列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spark 数据框中的 lit 在列中插入值?

使用 Map 替换 Spark 中的列值

获取Apache Spark Java中的整个数据集或仅列的摘要

Spark union

MySQL的or/in/union与索引优化

使用 Java 在 Spark Data Frame 中添加空值列