如何将RDD [Row]转换为RDD [String]

时间:2017-05-19 10:20:06

标签: scala apache-spark

我有一个名为source的DataFrame,一个来自mysql的表

val source = sqlContext.read.jdbc(jdbcUrl, "source", connectionProperties)

我已将其转换为rdd

val sourceRdd = source.rdd

但它的RDD [Row]我需要RDD [String] 进行像

这样的转换
source.map(rec => (rec.split(",")(0).toInt, rec)), .subtractByKey(), etc..

谢谢

2 个答案:

答案 0 :(得分:7)

您可以在Row. mkString(sep: String): String这样的电话中使用map方法:

val sourceRdd = source.rdd.map(_.mkString(","))

您可以根据需要更改","参数。

希望这对你有所帮助,最好的问候。

答案 1 :(得分:1)

你的架构是什么?

如果它只是一个字符串,您可以使用:

import spark.implicits._
val sourceDS = source.as[String]
val sourceRdd = sourceDS.rdd // will give RDD[String]

注意:在Spark 1.6中使用sqlContext而不是spark - spark是SparkSession,它是Spark 2.0中的新类,是SQL功能的新入口点。它应该用于代替Spark 2.x中的SQLContext

您也可以创建自己的案例类。

你也可以映射行 - 这里的源是DataFrame类型,我们在map函数中使用partial函数:

val sourceRdd = source.rdd.map { case x : Row => x(0).asInstanceOf[String] }.map(s => s.split(","))