如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符

Posted

技术标签:

【中文标题】如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符【英文标题】:How to split a text file into 2 columns based on multiple space chars as seperator with scala spark 【发布时间】:2021-12-31 06:36:11 【问题描述】:

我在将带有分隔符“”(多个空格)的文本数据文件拆分为数据框列时遇到了困难。我加载的数据文件如下所示:

results1.show()

+--------------------+
|                 all|
+--------------------+
|1     hjvh hjk 9 gkk|
|2     yjg vv 87 9bh |
|3     kjn 90j jn kjn|
|4     hb jkbkj j jb |
|....                |
|....                |
|....                |
|9997  jn kjn kjn jkn|
|9998  njkj jn8 98 in|
|9999  nkj kjnkn kjnk|

我希望它像这样分成 2 个单独的列:

|     No|          Address |
+-------+------------------|
|      1|    hjvh hjk 9 gkk|  
|      2|    yjg vv 87 9bh |      
|      3|    kjn 90j jn kjn|     
|      4|    hb jkbkj j jb |  
|     ..|             
|     ..|             
|     ..|             
|   9997|    jn kjn kjn jkn| 
|   9998|    njkj jn8 98 in|
|   9999|    nkj kjnkn kjnk|

【问题讨论】:

【参考方案1】:

您可以使用split

df.withColumn('all', f.expr("split(all, '[ ]2,')")) \
  .select(f.col('all')[0], f.col('all')[1]) \
  .toDF('No', 'Address').show()

+----+--------------+
|  id|         value|
+----+--------------+
|   1|hjvh hjk 9 gkk|
|   2|yjg vv 87 9bh |
|   3|kjn 90j jn kjn|
|   4|hb jkbkj j jb |
|9997|jn kjn kjn jkn|
|9998|njkj jn8 98 in|
|9999|nkj kjnkn kjnk|
+----+--------------+

【讨论】:

行如何将其分成两个单独的列?你能解释一下这部分“split(all, '[ ]2,')”吗? 表示空格2倍以上。【参考方案2】:

您想在第一次出现 space 时使用正则表达式拆分列。

详细说明请参阅此answer。 不同的是你的分隔符是space (\s)

results1.withColumn("Temp", split($"all", "(?<=^[^\\s]*)\\s"))
.withColumn("No", $"Temp"(0))
.withColumn("Address", $"Temp"(1))
.drop("all","Temp")
.show()

输出

+----+--------------------+
|  No|             Address|
+----+--------------------+
|   1|      hjvh hjk 9 gkk|
|   2|      yjg vv 87 9bh |
|   3|      kjn 90j jn kjn|
|   4|    hb jkbkj j jb...|
|9997|      jn kjn kjn jkn|
|9998|      njkj jn8 98 in|
|9999|      nkj kjnkn kjnk|
+----+--------------------+

【讨论】:

以上是关于如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bash shell 中将一个字符串拆分为多个字符串,至少用一个空格分隔?

将多个空格从文本文件拆分为数组

通过分隔符将列文本拆分为R中的多个不同列

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数(此处为1则拆分一次,列表长度为2

用空格(或任何字符)将文本单元格拆分为任意数量的单词,重复单词

在 PowerBI 中拆分文本列