我必须读取一个空格不一致的文件作为列定界符。我如何使用Python阅读任何建议。最终,我需要将此数据保存在pyspark数据框中。
文件内容如下:
AutoID AutoGUID ServerID ReceivedUTC
244021856 B22AD225-1373-4F13-9ADE-38963BA67835 GOEQXPWEPO020 2019-11-02 13:57:25.973
答案 0 :(得分:0)
如该链接How to change tab delimited in to comma delimited in pandas中所述 您可以将定界符更改为“无”或更改为熊猫中的特定字符 像:
pd.read_csv(filename,sep=None)
或
file = pd.read_csv(filename, sep="\t")
随时检查文档,因为它可能会给您一些提示https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
答案 1 :(得分:0)
此文件格式称为固定宽度文件。 pandas
具有专门用于读取此类文件的功能:read_fwf
默认情况下,pandas
将推断每列的宽度。如果发现这样做有麻烦,可以研究colspecs
可选参数。
您可以使用以下方法将生成的pandas.DataFrame
转换为pyspark DataFrame:
spark.createDataFrame(pandas_df)
答案 2 :(得分:0)
在 Python
中,我们可以使用正则表达式 split
,我们根据不一致的空间拆分数据。
import re
re.split("\\s+",'a b c')
['a', 'b', 'c']
In Pyspark:
#sample data
$ cat i.txt
one two three four five
six seven eight nine ten
cols=["col1","col2","col3","col4","col5"]
spark.sparkContext.textFile("<file_path>/i.txt").map(lambda x:re.split("\\s+",x)).toDF(cols).show()
#creating dataframe on the file with inconsistent spaces.
#+----+-----+-----+----+----+
#|col1| col2| col3|col4|col5|
#+----+-----+-----+----+----+
#| one| two|three|four|five|
#| six|seven|eight|nine| ten|
#+----+-----+-----+----+----+