我用以下代码加载json文件后
df = sqlContext.read().json(path);
我将在Java Spark中获取我的DataFrame。我有例如下一个DF:
id item1 item2 item3 ....
id1 0 3 4
id2 1 0 2
id3 3 3 0
...
我想以最简单的方式将其转换为(可能是类Rating的对象,id和item,然后转换为整数.hashCode())
id item ranking
id1 item1 0
id1 item2 3
id1 item3 4
....
id2 item1 1
id2 item2 0
id1 item1 2
...
PS首先尝试创建flatMap函数:
void transformTracks() {
JavaRDD<Rating> = df.flatMap(new Function<Row, Rating>(){
public Rating call(Row r) {
for (String i : r) {
return Rating(1, 1, r.apply(Double.parseDouble(i)));
}
}
})
}
答案 0 :(得分:2)
如果语法稍微偏离,你必须原谅我 - 我现在在Scala中编程并且自从我使用Java以来已经有一段时间 - 但是有些东西是这样的:
DataFrame df = sqlContext.read().json(path);
String[] columnNames = df.columns;
DataFrame newDF = df.flatMap(row -> {
ArrayList list = new ArrayList<>(columnNames.length);
String id = (String)row.get(0);
for (int i = 1; i < columnNames.length, i++) {
list.add(id, columnNames[i], (int)row.get(i));
}
return list;
}).toDF("id", "item", "ranking");