Scala的Tuple元素个数的限制问题

前言

Spark在读取文件的时候管用的手法如下:

spark.read.textFile("./data/tuple")
      .map(_.split(","))
      .map(x => (x(0), x(1), x(2), x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10),
        x(11), x(12), x(13), x(14), x(15), x(16), x(17), x(18), x(19), x(20), x(21), x(22), x(23), x(24)))

也就是读取文件,然后切分字段,封装为Tuple,可是Scala中Tuple的元素个数最多不能超过22个,否则:

tuples may not have more than 22 elements, but 25 given
        x(11), x(12), x(13), x(14), x(15), x(16), x(17), x(18), x(19), x(20), x(21), x(22), x(23), x(24)))

具体Scala为什么这么设计,大概率原因是认为元组中有22 个元素无论如何都已经足够多了,直到今天为止Scala研发人员并没有意图去取消掉这个限制(Scala最新版本为2.13.1)

如何处理

测试数据:

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
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
  • 最常用的处理方式
    使用数组
import spark.implicits._
    spark.read.textFile("./data/tuple")
      .map(_.split(","))
      .select($"value" (0).cast("string").as("col0"),
        $"value" (1).cast("string").as("col1"),
        $"value" (2).cast("string").as("col2"),
        $"value" (3).cast("string").as("col3"),
        $"value" (4).cast("string").as("col4"),
        $"value" (5).cast("string").as("col5"),
        $"value" (6).cast("string").as("col6"),
        $"value" (7).cast("string").as("col7"),
        $"value" (8).cast("string").as("col8"),
        $"value" (9).cast("string").as("col9"),
        $"value" (10).cast("string").as("col10"),
        $"value" (11).cast("string").as("col11"),
        $"value" (12).cast("string").as("col2"),
        $"value" (13).cast("string").as("col13"),
        $"value" (14).cast("string").as("col14"),
        $"value" (15).cast("string").as("col15"),
        $"value" (16).cast("string").as("col16"),
        $"value" (17).cast("string").as("col17"),
        $"value" (18).cast("string").as("col18"),
        $"value" (19).cast("string").as("col19"),
        $"value" (20).cast("string").as("col20"),
        $"value" (21).cast("string").as("col21"),
        $"value" (22).cast("string").as("col22"),
        $"value" (23).cast("string").as("col23"),
        $"value" (24).cast("string").as("col24"))
      .show()

结果:

+----+----+----+----+----+----+----+----+----+----+-----+-----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|col0|col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col2|col13|col14|col15|col16|col17|col18|col19|col20|col21|col22|col23|col24|
+----+----+----+----+----+----+----+----+----+----+-----+-----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|   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|
|   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|
+----+----+----+----+----+----+----+----+----+----+-----+-----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
发布了237 篇原创文章 · 获赞 134 · 访问量 17万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览