scala - Scala:在数据框中映射列整数值
问题描述
我有一个从城市到国家 ID 的映射
cityId, countryId
1, 1200
2, 1200
3, 1200
4, 3000
5, 3000
6, 4000
我的映射功能看起来像
val mapCountry = df.rdd.map(x => (x.getInt(0),
x.getInt(1))).collectAsMap()
我有一个数据框,其中有名为 cityId 和 countryId 的列。在数据框中,cityId 和 countryId 都包含 cityId 值,我想使用地图函数替换 countryId 列。
ft = mapGeography.foldLeft(ft)((acc, ca) =>
acc.withColumnRenamed(ca._1, ca._2))
这给了我一个错误,即字符串是预期的,但我传递的是 int。当我在具有字符串值的列上运行它时,它可以工作。
任何人都知道如何调整它以使用 int
解决方案
如果我正确理解您的问题,最好将两个数据框加入cityId
以选择想要的countryId
,如下所示。
val dfCity = Seq(
(1, 1200), (2, 1200), (3, 1200), (4, 3000), (5, 3000), (6, 4000)
).toDF("cityId", "countryId")
val dfGeography = Seq(
(1, 1, 101), (2, 2, 202), (4, 4, 404), (99, 99, 909)
).toDF("cityId", "countryId", "rank")
val nonIdCols = dfGeography.columns diff Array("cityId", "countryId")
dfGeography.
join(dfCity, Seq("cityId"), "left_outer").
select(dfGeography("cityId") +: dfCity("countryId") +: nonIdCols.map(col): _*).
show
// +------+---------+----+
// |cityId|countryId|rank|
// +------+---------+----+
// | 1| 1200| 101|
// | 2| 1200| 202|
// | 4| 3000| 404|
// | 99| null| 909|
// +------+---------+----+
请注意,如果dfCity
明显小于dfGeography
,您可以考虑通过在表达式中SQL query broadcast hint
简单地替换为来提供。dfCity
broadcast(dfCity)
join()
推荐阅读
- mysql - 尝试计算总订单和每月唯一客户
- python - 无法使用 Python 打开 Instagram 关注者页面
- android - Dagger 2 组件中存在具有匹配键的绑定
- spring-boot - 拆分共享一些类似功能的管理 API 和公共 API 是否是一种好方法?
- javascript - 拆分函数正在重复值
- c++ - QColorDialog 在 Ubuntu 上有所不同
- react-native - React Native useEffect() 重新渲染太多
- apache-spark - 当 .agg.count() 中没有行时显示 0
- ubuntu - microk8s pod 在我的树莓派 ubuntu 上频繁重启
- php - 如何解构 mysqli_result 行