我有一个文本文件,这是大的大小(3 gb),并希望处理这个文本文件在Spark。此文本文件中没有分隔符。每50个字符后,新记录开始,但记录之间没有分隔符。我不知道如何加载数据和处理文件?
示例.txt
数据集数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集新数据集
sc.textFile('path/to/file.txt') # this not helping here as there is no delimiter between records
只是为了识别我使用了强调和强的模式,但是我们知道文本文件没有任何强调和强,它是纯文本。
1条答案
按热度按时间k2fxgqgv1#
我想我们需要
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|
+--------------------------------------------------+