【问题标题】:How to query data stored into JavaRDD<java.class>?如何查询存储在 JavaRDD<java.class> 中的数据?
【发布时间】:2014-06-08 23:26:48
【问题描述】:

我编写了一个名为 Person.java 的简单 java 类来创建 Person 对象。

例如:

public Person(){
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

然后我在 Apache Spark 主驱动程序类中实现了以下代码。

JavaRDD<Person> people = ctx.textFile(logFile).map(
            new Function<String, Person>() {
                public Person call(String line) throws Exception {
                    String[] parts = line.split("\\|");

                    Person trans = new Person();
                    trans.setName(parts[0]);

                    return trans;
                }
            });

以上函数编译并运行良好但问题是我不确定如何查询人员数据集。如何获取存储的数据?

当我尝试时: people.first();

输出是: 人@3f03a49

我认为铸造的问题是什么?如何将其转换为人类可读的?

【问题讨论】:

  • 为什么你认为你拥有的对象不是你想要的?您没有定义toString(),而是说您不知道如何使用它的默认字符串表示。
  • 感谢 Sean 的及时回复。在发布这篇文章之前,我尝试了 toString(),但没有任何乐趣。我肯定想要创建和使用 Person 对象,但是一旦我将数据存储到 RDD 中,就不确定如何在 RDD 中检查这些数据。我可以在“测试”对象下方查询而没有任何问题,因为它是字符串,但对于人来说不是这样。 JavaRDD&lt;String&gt; test = ctx.textFile(file://...)
  • 什么意思?您编写的所有内容都表明您完全拥有所需的 Person 对象。
  • 感谢肖恩的建议。

标签: java bigdata apache-spark


【解决方案1】:

我建议在尝试使用像 Spark 这样的复杂库之前先学习一些 Java。 Person@3f03a49 不是强制转换的问题,这是 Person 类的对象默认转换为 String 的方式。你只需要定义

@Override
public String toString() {
    return "Person(" + name + ")";
}

Person 类中。

我如何获取存储的数据?

对于任何actionsfirstcollect 等。但请注意,默认情况下,Spark 不存储数据,它是动态计算的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    相关资源
    最近更新 更多