scala - 两个数据集连接后如何自动触发推断数据集?
问题描述
spark 是否可以自动推断架构并将 Dataframe 转换为 Dataset 而程序员不必为每个连接创建一个案例类?
import spark.implicits._
case class DfLeftClass(
id: Long,
name: String,
age: Int
)
val dfLeft = Seq(
(1,"Tim",30),
(2,"John",15),
(3,"Pens",20)
).toDF("id","name", "age").as[DfLeftClass]
case class DfRightClass(
id: Long,
name: String,
age: Int
hobby: String
)
val dfRight = Seq(
(1,"Tim",30,"Swimming"),
(2,"John",15,"Reading"),
(3,"Pens",20,"Programming")
).toDF("id","name", "age", "hobby").as[DfRightClass]
val joined: DataFrame = dfLeft.join(dfRight) // this results in DataFrame instead of a Dataset
解决方案
要留在 Dataset API 中,您可以使用joinWith。这个函数返回一个包含连接两边的元组数据集:
val joined: Dataset[(DfLeftClass, DfRightClass)] = dfLeft.joinWith(dfRight,
dfLeft.col("id").eqNullSafe(dfRight.col("id")))
结果:
+-------------+--------------------------+
|_1 |_2 |
+-------------+--------------------------+
|{1, Tim, 30} |{1, Tim, 30, Swimming} |
|{2, John, 15}|{2, John, 15, Reading} |
|{3, Pens, 20}|{3, Pens, 20, Programming}|
+-------------+--------------------------+
从这里您可以继续使用元组,也可以将元组映射到第三个案例类。
推荐阅读
- python - 为什么像数组这样的 Numpy 可变变量没有更新同一内存上的值?
- flutter - 我的 Firestore 规则访问其他用户路径时出现会议权限错误
- php - 如何对另一个wordpress php文件进行href?
- reactjs - React + Redux + Storybook:在编写故事书故事时如何使用连接的 React 路由器的 useParams?
- scala - 在 IntelliJ 中使用 Gradle 构建具有依赖项的 Jar,包括多个主类
- spring-data-jpa - 如何转换为 JPQL 用于内联视图?
- c++ - 仅当我们在优先级队列中使用自定义比较器时才需要传递容器类型?
- javascript - 根据重复出现修改数组值
- ios - 我可以使用 NavigationController 来解除屏幕移动吗?
- php - 如何在 PHP 标记 echo 内的脚本中使用 jquery 变量?