Spark,Java中的DataFrame转换

时间:2016-02-24 13:35:05

标签: java apache-spark

我用以下代码加载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)));
                }
            }
        })
    }

1 个答案:

答案 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");