spark如何设置列数的数据集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark如何设置列数的数据集相关的知识,希望对你有一定的参考价值。

我有这样一个文件:

test057 - 192.168.1.12 - 00:11:22:33:44:57 - 2ZZ66-1 node 6 -  - test052 - 192.168.1.16 - 00:11:22:33:44:61 - 2ZZ66-1 Node2 -
test058 - 192.168.1.13 - 00:11:22:33:44:58 - 2ZZ66-1 node 5 -  - test053 - 192.168.1.17 - 00:11:22:33:44:62 - 2ZZ66-1 Node1 -
test_a001 - 192.168.100.10 - 1234.5678.0123 - AZZDEF -  -  -  -  -  -
test_b001 - 192.168.100.11 - 4321.1234.1234 - GHIJKL -  -  -  -  -  -

我如何将其拆分为4列?

| name    |     ip        |     mac           |    tag         |
|--------------------------------------------------------------|    
|test057  | 192.168.1.12  | 00:11:22:33:44:57 | 2ZZ66-1 node 6 |
|test052  | 192.168.1.16  | 00:11:22:33:44:61 | 2ZZ66-1 Node2  |
|test058  | 192.168.1.13  | 00:11:22:33:44:58 | 2ZZ66-1 node 5 |    
|test053  | 192.168.1.17  | 00:11:22:33:44:62 | 2ZZ66-1 Node1  |
|test_a001| 192.168.100.10| 1234.5678.0123    | AZZDEF         |
|test_b001| 192.168.100.11| 4321.1234.1234    | GHIJKL         |
答案

您可以加载文件,然后按“ - ”拆分并将列映射到类。

val ipFile = sc.textFile("file:////in_f/test/inpf.txt");
val ipSplit = ipFile.map(_.split("-"))
case class IP (name: String, ip: String, mac: String, tag: String)
val ipDF = ipSplit.map(x => IP(x(0),x(1), x(2),x(3))).toDF()
ipDF.select($"name", $"ip", $"mac", $"tag").take(4).foreach(println)

打印时,结果输出如下所示。

[test057, 192.168.1.12, 00:11:22:33:44:57, 2ZZ66] 
[test058, 192.168.1.13, 00:11:22:33:44:58, 2ZZ66] 
[test_a001, 192.168.100.10, 1234.5678.0123, AZZDEF]
[test_b001, 192.168.100.11, 4321.1234.1234, GHIJKL]

enter image description here

以上是关于spark如何设置列数的数据集的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 Spark 中使用 Dataframes(由 structtype 方法创建)合并具有不同列数的 2 个表?

如何“扁平化”具有可变列数的 Spark 模式?

如何将具有未知列数的 ResultSet 映射到 List 并将其显示在 HTML 表中?

Dataprep将具有不同列数的文件导入数据集

如何在 R 中读取具有不同列数的 CSV 文件

解析具有未知列数的 Pandas 数据框以在 statsmodels.api 中使用