JavaPairRDD 到 Apache Spark 中的 DataFrame 与 java

Posted

技术标签:

【中文标题】JavaPairRDD 到 Apache Spark 中的 DataFrame 与 java【英文标题】:JavaPairRDD to DataFrame in Apache Spark with java 【发布时间】:2015-10-18 17:25:01 【问题描述】:

我有一些文档文件,我尝试读取数据,然后使用 zipWithIndex() 函数进行索引压缩:

    JavaRDD<String> rawTextRDD = sc.textFile("demo.txt");
    JavaPairRDD<String, Long> zipIndex = rawTextRDD.zipWithIndex();

zipIndex 的值之后是一个包含键值对的 JavaPairRDD,看起来像 ["This is the beautiful picture", 0], ["This is another picture", 1]。

但现在,我想使用以下方法将 zipIndex 转换为 DataFrame:

DataFrame docDF = sqlContext.createDataFrame(zipIndex, TextId.class);

函数 createDataFrame 不接受参数 zipIndex(TextId 是一个具有 2 个属性的类:String text 和 int docId)。

我在 Scala 中也有一段代码,它运行得非常好。请参考:

val rawTextRDD = sc.textFile("demo.txt")
val docDF = rawTextRDD.zipWithIndex.toDF("text", "docId")

如果有任何解决方案。请帮我解决。谢谢

【问题讨论】:

你想在这里做什么sqlContext.createDataFrame(zipIndex, TextId.class); 我看不出它有什么理由接受zipIndex。这是JavaPairRDD&lt;String, Long&gt; 而不是JavaRDD&lt;TextId&gt; @eliasah 我认为这是简单的类型不匹配,zipIndex 应该映射到JavaRDD&lt;TextId&gt;,但我懒得检查:) 你怎么看? @zero323 我试图检查它。 Java API 让我从 rawTextRDD 获取 rdd 以创建 Tuple 的 RDD,这很奇怪。明天我会对此进行更多调查。 感谢 zero323 和 @eliasah,我重新检查了 Java API,函数 createDataFrame 不接受参数 JavaPairRDD。这是我的错。非常感谢,我会尝试从 JavaPairRDD 转换为 JavaRDD :D 【参考方案1】:

试试这个:DataFrame docDF = sqlContext.createDataFrame(zipIndex.values(), TextId.class);

【讨论】:

解释一下为什么此更改可以解决问题可能会很好。

以上是关于JavaPairRDD 到 Apache Spark 中的 DataFrame 与 java的主要内容,如果未能解决你的问题,请参考以下文章

使用 scala 将 JavapairRDD 转换为数据帧

在执行spar-sql程序中报错:java.lang.NoSuchMethodError: org.apache.spark.internal.Logging.$init$(Lorg/apache/s

JavaPairRDD 到 SPARK 中的数据集<Row>

通过操作 JavaPairRDD 的值 (Sum) 来转换 JavaPairRDD

Java Spark 如何将 JavaPairRDD<HashSet<String>, HashMap<String, Double>> 保存到文件中?

spark actions 算子