我很难用分隔符“”(多个空格)将文本文件分割成数据帧列。我加载的数据文件如下所示:
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|我想把它分成两列,如下所示:
| 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|发布于 2021-12-31 08:11:06
您希望在第一次出现space时使用regex对列进行拆分。
有关详细说明,请参阅此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|
+----+--------------------+发布于 2021-12-31 08:00:30
您可以使用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|
+----+--------------+https://stackoverflow.com/questions/70539643
复制相似问题