我有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(SuperStoreSalesPC)
val resultCS = test_spark_rdd.select("customersegment").as(SuperStoreSalesCS)
val resultRG = test_spark_rdd.select("region").as(SuperStoreSalesRG)
我想转换每个val:resultPC,resultCS,resultRG在单独的RDD [Array [String]]中,其中这些val是列
答案 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]])
我希望答案很有帮助