Delimiting pyspark .read.text() with regex



我正在尝试将文本文件读取到PySpark数据框架中。文本文件有不同数量的空格。所以一行可以是这样的:

Ryan A. Smith>>>Welder>>>>>>3200 Smith Street>>>>>99999

用空格代替箭头

我需要分隔它,但我不一定知道这个命令。我知道它们总是被至少2个空格隔开,所以正则表达式看起来很完美。但是,我无法在PySpark中找到这样做的方法。

我们可以尝试在这里使用split来生成您想要的列:

df_new = df.withColumn('name', split(df['col'], '>+').getItem(0))
.withColumn('occupation', split(df['col'], '>+').getItem(1))
.withColumn('address', split(df['col'], '>+').getItem(2))
.withColumn('number', split(df['col'], '>+').getItem(3))

假设上面显示的当前文本位于名为col的列中。

您可以尝试先创建一个列名称的列表,然后应用split,因为它接受regex模式作为分隔符。

from pyspark.sql import functions as F
cols = ['name', 'job', 'address', 'id']
df = df.select(
[F.split('col_name', ' {2,}')[i].alias(c) for i, c in enumerate(cols)]
)

最新更新