将CassandraRDD转换为RDD[数组[字符串]]

ykejflvf  于 2022-11-05  发布在  Cassandra
关注(0)|答案(1)|浏览(145)

我有一个Cassandra表,我选择了一些列来对它们执行关联规则。我为每一列创建了case类来保存它们。我有类型为
[超级商店销售RG]**
其中,SuperStoreSalesRG是要将其转换为的单列的case类

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]]中,其中这些值是列

gzjq41n4

gzjq41n41#

将三列"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]])

我希望答案对你有帮助

相关问题