在 Spark 中处理没有定界符的文本文件

Process textfile without delimter in Spark

我有一个很大的文本文件 (3 GB),想在 spark 中处理这个文本文件。此文本文件中没有分隔符。每 50 个字符后开始新记录,但记录之间没有分隔符。我不知道如何加载此数据和处理此文件?

sample.txt

thisisdatathisisdatathisisdatathisisdatathisisdatathisisnewdatasetthisisnewdatasetthisisnewdatasetaathisisdatathisisdatathisisdatathisisdatathisisdatathisisnewdatasetthisisnewdatasetthisisnewdatasetaathisisdatathisisdatathisisdatathisisdatathisisdata

sc.textFile('path/to/file.txt') # this not helping here as there is no delimiter between records

只是为了识别我使用强调和强调的模式,但是我们知道文本文件没有任何强调和强调,它是纯文本。

我认为我们需要在这种情况下使用 udf,因为 regexp_extract_all 直到 Spark-3.1版本

Example:

from pyspark.sql.functions import *
from pyspark.sql.types import *

#read the file as csv
df=spark.read.csv("<file_path>").toDF("val")

#udf to capture 50 character groups
def regex_all_matches(s):
    all_matches = re.findall(r'.{1,50}', s)
    return all_matches

#register udf and 
regex_all_matches_udf = udf(regex_all_matches, ArrayType(StringType()))

df2 = df.withColumn('val', explode(regex_all_matches_udf(col('val'))))

#+--------------------------------------------------+
#|val                                               |
#+--------------------------------------------------+
#|thisisdatathisisdatathisisdatathisisdatathisisdata|
#|thisisnewdatasetthisisnewdatasetthisisnewdatasetaa|
#|thisisdatathisisdatathisisdatathisisdatathisisdata|
#|thisisnewdatasetthisisnewdatasetthisisnewdatasetaa|
#|thisisdatathisisdatathisisdatathisisdatathisisdata|
#+--------------------------------------------------+