PySpark中如何将DataFrame转换为字符串用于正则表达式处理
Pandas DataFrame转字符串做正则处理实现方案
需求说明
将Spark读取的文本文件转换为Pandas DataFrame后,把文本内容转为可做正则处理的字符串格式,实现相邻行两两拼接、删除行内换行,最终输出指定格式的结果。
输入数据
SRAVAN KUMAR RAKESH SOHAN
原有代码问题
- 直接将Pandas DataFrame对象传入
re.sub()方法:re.sub仅支持字符串类型入参,无法直接处理DataFrame结构 - 正则替换逻辑不符合预期:原逻辑会删除所有换行符,最终得到一整行连续字符串,无法实现两两分行拼接的效果
- 存在无效错误代码行:
schema: pysark.sql.dataframe.DataFrame为无效语句,且pysark存在拼写错误
可运行修正代码
列表拼接实现(无需正则,性能更优)
import pandas as pd # 读取HDFS文本文件 file = spark.read.text("hdfs://test.txt") pands_df = file.toPandas() # 提取默认存文本的value列,过滤空值后转为列表 content_list = pands_df['value'].dropna().tolist() # 按每2个元素为一组做无间隔拼接 merge_result = [''.join(content_list[i:i+2]) for i in range(0, len(content_list), 2)] # 拼接为最终输出的字符串格式 result = '\n'.join(merge_result) print(result)
正则实现版本
如果需要通过正则完成处理,先将DataFrame中的文本内容拼接为完整字符串,再通过正则替换相邻行之间的换行符:
import re import pandas as pd file = spark.read.text("hdfs://test.txt") pands_df = file.toPandas() # 先将所有文本行拼接为带换行的完整字符串 full_content = '\n'.join(pands_df['value'].dropna().tolist()) # 正则匹配相邻两行,删除两行中间的换行符 result = re.sub(r'(.+)\n(.+)', r'\1\2', full_content) print(result)
期望输出结果
SRAVANKUMAR RAKESHSOHAN
内容的提问来源于stack exchange,提问作者kmr
相关产品推荐
相关产品推荐

