scala - 除了 Spark Scala 的更好的替代品
问题描述
有人告诉我这EXCEPT
是一项非常昂贵的操作,应该始终尽量避免使用EXCEPT
. 我的用例 -
val myFilter = "rollNo='11' AND class='10'"
val rawDataDf = spark.table(<table_name>)
val myFilteredDataframe = rawDataDf.where(myFilter)
val allOthersDataframe = rawDataDf.except(myFilteredDataframe)
但我很困惑,在这种用例中,我的选择是什么?
解决方案
使用left anti join
如下-
val df = spark.range(2).withColumn("name", lit("foo"))
df.show(false)
df.printSchema()
/**
* +---+----+
* |id |name|
* +---+----+
* |0 |foo |
* |1 |foo |
* +---+----+
*
* root
* |-- id: long (nullable = false)
* |-- name: string (nullable = false)
*/
val df2 = df.filter("id=0")
df.join(df2, df.columns.toSeq, "leftanti")
.show(false)
/**
* +---+----+
* |id |name|
* +---+----+
* |1 |foo |
* +---+----+
*/
推荐阅读
- scala - 将回调传递给函数以在 Scala 未来的 onComplete 方法上注册
- python - 语法 Keras 层定义
- php - 会话处于活动状态时,Devilbox pgMyAdmin 错误无法更改会话名称
- java - 当用户未使用远程桌面登录时,无法运行 powershell.exe 并使用 Invoke-WmiMethod 执行 ps1 文件
- gradle - 如何防止 gradle 任务覆盖由调用 groovy 类创建文件的自定义任务创建的文件
- swift - Swift:自定义注释丢失字幕
- django-forms - 如何使用 Crispy 表单将 action 和 novalidate 属性添加到表单标签
- android - 如何为 viewPager2 设置适配器
- angular - Angular:仅允许通过模板访问组件成员
- python-3.x - 如何使用 django restframework 构建 django 模板