Scala 如何在Spark中创建包含29列的数据集

Scala 如何在Spark中创建包含29列的数据集,scala,apache-spark,Scala,Apache Spark,我正在尝试从RDD创建数据集。 这是我的密码: val word = lines.map(_.value()) word.print() word.foreachRDD( rdd => { for(item <- rdd.collect().toArray) {

我正在尝试从RDD创建数据集。 这是我的密码:

val word = lines.map(_.value())
                        word.print()
                        word.foreachRDD( rdd => {
                            for(item <- rdd.collect().toArray) 
                            {
                                val s=item.split(",")
                                if(s.length ==37){
                            val collection = sc.parallelize(Seq((s(0),s(1),s(2),s(3),s(4),s(5),s(6),s(7),s(8),s(9),
                                s(10),s(11),s(12),s(29),s(30),s(31),s(32),s(33),s(34),s(35),s(36))));


                                val dataset = sc.parallelize(Seq((s(0),s(1),s(2),s(3),s(4),s(5),s(6),s(7),s(8),s(9),
                                s(10),s(11),s(12),s(13),s(14),s(15),s(16),s(17),s(18),s(19),s(20),s(21),s(22),s(23),s(24),
                                s(25),s(26),s(27),s(28)))
                                ).toDS()

                            }
                            }
val word=lines.map(u.value())
word.print()
word.foreachRDD(rdd=>{

对于(项目您可以创建
案例类
(您可以根据需要更改
数据类型

并在代码中使用
案例类

我将创建用于测试的临时字符串,并像您在代码中所做的那样拆分字符串,最后使用
case类

val item = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37"
val s=item.split(",").map(_.toInt)
Seq(dataset(s(0),s(1),s(2),s(3),s(4),s(5),s(6),s(7),s(8),s(9),s(10),s(11),s(12),s(13),s(14),s(15),s(16),s(17),s(18),s(19),s(20),s(21),s(22),s(23),s(24),s(25),s(26),s(27),s(28),s(29),s(30),s(31),s(32),s(33),s(34),s(35),s(36))).toDS().show
这将为您提供包含37列的
dataset

+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15|col16|col17|col18|col19|col20|col21|col22|col23|col24|col25|col26|col27|col28|col29|col30|col31|col32|col33|col34|col35|col36|col37|
+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|   1|   2|   3|   4|   5|   6|   7|   8|   9|   10|   11|   12|   13|   14|   15|   16|   17|   18|   19|   20|   21|   22|   23|   24|   25|   26|   27|   28|   29|   30|   31|   32|   33|   34|   35|   36|   37|
+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

您可以更改案例类和实现以适合您的29列

您可以创建一个
案例类
(您可以根据需要更改
数据类型

并在代码中使用
案例类

我将创建用于测试的临时字符串,并像您在代码中所做的那样拆分字符串,最后使用
case类

val item = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37"
val s=item.split(",").map(_.toInt)
Seq(dataset(s(0),s(1),s(2),s(3),s(4),s(5),s(6),s(7),s(8),s(9),s(10),s(11),s(12),s(13),s(14),s(15),s(16),s(17),s(18),s(19),s(20),s(21),s(22),s(23),s(24),s(25),s(26),s(27),s(28),s(29),s(30),s(31),s(32),s(33),s(34),s(35),s(36))).toDS().show
这将为您提供包含37列的
dataset

+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15|col16|col17|col18|col19|col20|col21|col22|col23|col24|col25|col26|col27|col28|col29|col30|col31|col32|col33|col34|col35|col36|col37|
+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|   1|   2|   3|   4|   5|   6|   7|   8|   9|   10|   11|   12|   13|   14|   15|   16|   17|   18|   19|   20|   21|   22|   23|   24|   25|   26|   27|   28|   29|   30|   31|   32|   33|   34|   35|   36|   37|
+----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+

您可以更改case类和实现以适合您的29列

使用
StructType
来定义模式,创建
RDD[org.apache.spark.sql.Row]
,?,PROFIT!您能分享一些代码吗?我会使用嵌套结构(复杂类型)…我看到你有一个CSV。你在这里试图做的是不正确的。你不必使用
rdd.collect.toArray
。你可以通过
spark.read.CSV(path)
@philantrover直接获得数据帧。我正在从卡夫卡流(CSV格式)读取数据使用
StructType
定义架构,创建
RDD[org.apache.spark.sql.Row]
,?,profice!你能分享一些代码吗?我会使用嵌套结构(复杂类型)…我看到你有一个CSV。你在这里试图做的是不正确的。你不必使用
rdd.collect.toArray
。你可以通过
spark.read.CSV(path)
@philantrover直接获得数据帧。我正在从卡夫卡流(CSV格式)读取数据不是从文件中。您使用的是Spark&Scala的哪个版本?必须是最新版本。文档中说“Scala 2.10中的案例类最多只能支持22个字段。要克服此限制,您可以使用实现产品接口的自定义类”在Scala 2.11中,22个字段的大小写类限制已被删除,允许任意数量的字段。然而,元组仍然限制为22个字段。您使用的是Spark&Scala的哪个版本?文档中说必须是最新版本“Scala 2.10中的案例类最多只能支持22个字段。要解决此限制,您可以使用实现产品接口的自定义类。”Scala 2.11中的案例类22个字段的限制已被删除,允许任意数量的字段。但是元组仍然限制为22个字段。