apache-spark - 从 Spark Java API 中的另一个数据集替换行数据集
问题描述
我有两个数据集,如下所述
DS1:
R_REGIONKEY | R_NAME | R_COMMENT |
---|---|---|
0 | 非洲 | 拉尔存款。比... |
1 | 美国 | hs 使用讽刺,ev... |
DS2:自定义加密程序从 DS1 中提取 R_NAME,调用 RestAPI 加密数据并创建以下数据集。
R_NAME |
---|
AVR8oDKFFNpuSWR9V.. |
AVR8oDL+si82n9k5g... |
我想在 DS1 被下推以进行进一步处理之前,将 DS1 中的 R_NAME 替换为 DS2 中的 R_NAME。不能使用联合,因为数据帧不相同,并且连接正在创建重复项,因为两个数据帧之间没有共同的标识符。
有人可以用示例 Spark Java 解决方案指导我吗?提前致谢。
解决方案
我能够通过使用 monotonically_increasing_id() 方法在两个数据集中添加一个公共标识符来解决上述问题。
Dataset<Row> df = spark.read().option("header",Boolean.TRUE).
csv("/opt/REGION_202107282300.csv");
Dataset<Row> dfWithUniqueId = df.withColumn("IDX", monotonically_increasing_id());
dfWithUniqueId.show();
DS1:
| R_REGIONKEY | R_NAME | R_COMMENT | IDX | | -------- | -------- | ------ | - | | 0 | 非洲 | 拉宝糖 | 0 | | 1 | 美国 | s 使用讽刺 | 1 | | 2 | 亚洲 | 格斯。薄均匀| 2 |
DS2:自定义加密程序从 DS1 中提取 R_NAME,调用 RestAPI 将数据与来自 DS1 的 IDX 值一起加密,并使用来自 DS1 的 IDX 值创建以下数据集。
IDX | R_NAME |
---|---|
0 | AVR8oDKFFNpuSWR9V... |
1 | AVR8oDL+si82n9k5g... |
2 | AVR8oDK5VjuvWtnPB... |
在 IDX 列上实现 join 方法
Dataset<Row> DS3 = DS1.join(DS2,DS1.col("IDX).equalTo(DS2.col("IDX)));
推荐阅读
- c# - C# Windows 窗体 DataGridView:不显示水平滚动
- elasticsearch - 在 Elasticsearch 中对索引调用 _search API 时出错
- python - 是否设置`torch.backends.cudnn.benchmark = True`?
- c - 为什么 sprintf() 会生成问号字符作为输出?
- r - 如何使用每月日期设置 geom_rect() xmin 和 xmax 以便它们接触但不重叠?
- r - R barplot + sapply 洗牌(虽然不应该)
- php - PHP 中的依赖注入 (slim, php-di)
- r - R为频率的pdf输出添加标题
- c++ - 带有和不带有主体的 C++ 部分构造函数的行为不同
- java - 如何多次运行while循环