scala - 使用一个 when 子句添加多个列
问题描述
我有一个看起来像这样的代码:
df.withColumn( colPath , when( col(colType) =!= S_IFLNK_name, regexp_extract(col(tempColPath) , exp = "^(.*\\/).*$", groupIdx = 1 ) )
.otherwise( regexp_extract( col(tempColPath), exp = "^(.*\\/)(?:[^\\/]+\\-\\>.*)$", groupIdx = 1 ) ) )
.withColumn( colFilename, when( col(colType) =!= S_IFLNK_name, regexp_extract(col(tempColPath), exp = "^(?:.*\\/)(.*)$", groupIdx = 1 ) )
.otherwise( regexp_extract( col(tempColPath), exp = "^(?:.*\\/)([^\\/]+\\-\\>.*)$", groupIdx = 1 ) ) )
没有必要理解该代码,但我的目标是能够只使用一个 when 子句并一次添加 2 列。
进行两次此测试以添加一列是一个可怕的性能问题,有可能吗?
我尝试使用match case
,但您不能将它们应用于Columns
值。
解决方案
从火花文档withColumn
:(https://spark.apache.org/docs/2.4.4/api/java/org/apache/spark/sql/Dataset.html#withColumn-java.lang.String-org.apache。 spark.sql.Column- ):
通过添加列或替换具有相同名称的现有列来返回新数据集。
因此,.withColumn
对需要添加的每个新列使用 a。
yourDF
.withColumn("new_column",
when($"old_column".isNull, lit("new_column_true_value"))
.otherwise($"new_column_false_value"))
.withColumn("new_column_2",
when($"old_column_2".isNull, lit("new_column_2_true_value"))
.otherwise($"new_column_2_false_value"))
推荐阅读
- amazon-web-services - 如何在 AWS Amplify 上更改这些文本?
- javascript - django:将表单添加到模板中的表单集导致问题
- coldfusion - 在 CFOUTPUT 中显示另一个变量
- java - Eclipse Java 类“无法解析为类型”错误消息
- assembly - ARM 程序集堆栈值不移动
- android - 如何将带有 Android Room 的应用添加为使用 makefile 编译的系统应用?
- javascript - 在函数中扩展/继承父组件
- thymeleaf - Thymeleaf 文本文字中的下划线
- javascript - Google 趋势小部件 - 相关查询 - 通过自动点击(ng-click)将视图从顶部更改为上升
- django - 通过 docker-compose 在 Docker 容器中启动 Django 的 runserver