将CassandraRDD转换为RDD [Array [String]]

时间:2017-10-24 16:10:20

标签: scala apache-spark apache-spark-mllib cassandra-3.0

我有Cassandra Table,我选择了一些列来对它们做关联规则。我为每个列创建了case类,以便将它们保存在其中。 我有类型

的列数据

com.datastax.spark.connector.rdd.CassandraRDD [SuperStoreSalesRG]

其中SuperStoreSalesRG是单列的案例类 我想将其转换为

RDD [数组[字符串]]

怎么做?!

非常感谢..

这是我到目前为止所尝试的

val test_spark_rdd = sc.cassandraTable("demo1", "orders4") 

case class SuperStoreSalesPC (ProductCategory: String) 
case class SuperStoreSalesCS (CustomerSegment: String) 
case class SuperStoreSalesRG (Region: String) 

val resultPC = test_spark_rdd.select("productcategory").as(SuperStoreSalesP‌​C) 
val resultCS = test_spark_rdd.select("customersegment").as(SuperStoreSalesC‌​S) 
val resultRG = test_spark_rdd.select("region").as(SuperStoreSalesRG)

我想转换每个val:resultPC,resultCS,resultRG在单独的RDD [Array [String]]中,其中这些val是列

1 个答案:

答案 0 :(得分:0)

将三列"productcategory", "customersegment", "region"分成三个数据集resultPC, resultCS, resultRG后,您可以执行以下操作将每个datasets转换为RDD[Array[String]]

第一步将使用内置collect_list功能

import org.apache.spark.sql.functions._
val arrayedResultPC = resultPC.withColumn("productcategory", collect_list("productcategory"))

将使用以下datasets

创建schema
root
 |-- productcategory: array (nullable = true)
 |    |-- element: string (containsNull = true)

您可以对其他两个数据集执行相同的操作

最后一步将收集的datasets转换为RDD[Array[String]]

val arrayedRdd = arrayedResultPC.rdd.map(_.toSeq(0).asInstanceOf[mutable.WrappedArray[String]])

我希望答案很有帮助