【问题标题】:DataFrame transformation in Spark, JavaSpark,Java中的DataFrame转换
【发布时间】:2016-02-25 08:11:29
【问题描述】:

在我加载一个 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 类的 Object,然后通过 .hashCode() 转换为 Integer)

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)));
                }
            }
        })
    }

【问题讨论】:

  • 我在想flatMap 会成功吗?
  • @Glennie Helles Sindhoit,对不起,我是 Java Spark 的新手,你能举个例子吗?

标签: java apache-spark


【解决方案1】:

如果语法稍有偏差,请原谅我——我现在用 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");

【讨论】:

  • 谢谢,我现在正在尝试理解平面地图功能,将在上面更新我的解决方案。
猜你喜欢
  • 2017-03-25
  • 2017-05-09
  • 2022-01-22
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 2018-08-26
  • 2017-08-09
相关资源
最近更新 更多