apache-spark - 在 Java8 Spark 中将 Row[] 转换为二维数组
问题描述
我想使用 Java8 和 Spark 将 Row[] 列表转换为二维数组 String[][]
输入数据框
+-------------------+----+-----+
| attribute|city|cntry|
+-------------------+----+-----+
|LOC1,LOC2,LOC3,LOC4| chn| AU|
| LOC1,LOC4| mdu| PE|
| LOC9,LOC7| sdu| US|
| LOC5,LOC6| fdu| CAN|
+-------------------+----+-----+
请帮助我获得预期的输出。
无法获得预期的输出并且只存储最后一行数据。
将 Java8 与 Spark 结合使用
Dataset<Row> df1 = ss.read().option("inferSchema", true).format("json").load("src/main/resources/input.json");
String[][] outputList = new String[100][100];
Row[] colList = (Row[]) df1.collect();
int rowCount = (int) df1.count();
for (Row rw : colList) {
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < rw.size(); j++) {
outputList[i][j] = rw.get(j).toString();
}}}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
System.out.println("outputList[" + i + "][" + j + "]" + outputList[i][j]);
}}
预期输出应如下所示
outputList[0][0]:LOC1,LOC2,LOC3,LOC4
outputList[0][1]:chn
outputList[0][2]:AU
outputList[1][0]:LOC1,LOC4
outputList[1][1]:mdu
outputList[1][2]:PE
outputList[2][0]:LOC9,LOC7
outputList[2][1]:sdu
outputList[2][2]:US
outputList[3][0]:LOC5,LOC6
outputList[3][1]:fdu
outputList[3][2]:CAN
解决方案
试试看
Row[] rows = (Row[]) df.collect();
int cSize = rows[0].size();
int rSize = rows.length;
String[][] outputList = new String[rSize][cSize];
for (int i = 0; i < rSize; i++) {
Row row = rows[i];
for (int j = 0; j < cSize; j++) {
String element = row.get(j).toString();
outputList[i][j] = element;
}
}
推荐阅读
- sql - 在 DBT 中旋转带有撇号的列
- algorithm - 求解具有非固定系数的线性方程组
- google-cloud-platform - 在 KMS 中安全地存储应用程序默认凭据
- java - 水平组中的 Libgdx 中心缩放文本按钮
- java - Spring JPA CriteriaQuery 子实体列
- javascript - 通过向元素添加类来执行动画
- excel - 通过 vba 代码将数据从 Access 解析到 Excel 以根据字段内容拆分到工作表中
- windows - 命令终端
- dictionary - 使用 300 个航点的谷歌地图路线
- angular - Angular 无法使用 Azure 身份验证从 Spring API 获取请求