在 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|
#+--------------------------------------------------+
我有一个很大的文本文件 (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|
#+--------------------------------------------------+