【问题标题】:Hadoop Spark: How to make distinct of elements in JavaRDD?Hadoop Spark:如何区分 JavaRDD 中的元素?
【发布时间】:2014-10-08 07:31:40
【问题描述】:

我想将一些 JavaRDD 集合的不同存储到 Spark 中的文件中?

通过使用 RDD 的 distinct() 方法,我无法达到同样的效果。

我的猜测是 RDD 将每个元素视为一个单独的实例。在这种情况下,我们如何实现不同。

下面是sn-p代码,谁能帮忙?

public static void main(String[] args) {
    SparkConf conf = new SparkConf().setAppName("Xml Spark Demo");
    JavaSparkContext sc = new JavaSparkContext(conf);

    JavaSQLContext sqlContext = new org.apache.spark.sql.api.java.JavaSQLContext(
            sc);


    // Load a text file and convert each line to a JavaBean.
    JavaRDD<String> dataFromFile = sc.textFile(
            "/home/kedarnath/Rentals/inputData/temp-01.xml").map(
            new ParseAgentFromXml());

    //Need distinct values here
    dataFromFile.distinct().saveAsTextFile("/home/kedarnath/Rentals/testOutputDistinct.txt");

}

提前致谢,

~凯达

【问题讨论】:

  • 请提供更多信息,了解您所指的“与文件不同的一些 JavaRDD 集合”。
  • 举个例子是个好主意。
  • 感谢@MikelUrkia 的回复!这是快速示例:我想从 JavaRDD 中获取不同的字符串并给它们唯一的编号(autoIncrement)。假设我的 JavaRDD 包含以下字符串:"abc","abc","def","pqr","abc","abc","def","pqr" 我希望输出为:1,"abc" 2, "def" 3,"pqr" 你能帮忙吗?谢谢,~Kedar
  • 请更新问题以便更容易理解示例。包括您正在寻找的内容以及您实际获得的内容作为输出。这样我们就能更有效地帮助您。

标签: java apache-spark rdd


【解决方案1】:

我不确定从性能角度来看这是否是最有效的方法,但我会尝试将过程分为两个不同的步骤:定义和映射到配对。考虑以下示例:

Original dataset:          Desired output (distinct elements)

Apple                      1, Apple
Tree                       2, Tree
Car                        3, Car
Priest                     4, Priest
Apple                      5, Phone
Tree
Apple
Phone
  • 区别:

通过使用distinct() 转换,您将获得一个包含所有不同元素的新RDD 数据集。在这种情况下,它会返回如下内容:

Apple
Tree
Car
Priest
Phone
  • 映射到配对:

下一步是将键关联到 RDD 数据集中的每个值,将其转换为键值格式。为此,可以使用转换mapToPair()。输出将产生所需的输出。

1, Apple
2, Tree
3, Car
4, Priest
5, Phone

访问this 页面以获取有关不同可用方法的更多信息。

【讨论】:

  • 感谢@Mikel 的回复!您已经了解了确切的问题。上面提到的 distinct() 方法没有给出不同的数据集,我可以看到很多相同字符串的重复值。我怀疑这是因为 distinct() 将每个字符串视为一个单独的对象。能否请您帮助我了解我们如何才能在这里实现与众不同。
  • 如果我没记错的话,不应该这样。我的猜测是您的问题与 XML 输入格式有关。我是从几乎完全无知的情况下说出来的,所以我非常感谢其他人的任何帮助或建议。
  • 确保你的类正确实现了equals()和hashCode()
猜你喜欢
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 2020-02-11
相关资源
最近更新 更多