【问题标题】:how to find a delimiter from a file using pyspark如何使用pyspark从文件中查找分隔符
【发布时间】:2020-04-04 19:31:10
【问题描述】:
有没有办法找到分隔符并使用 spark read 读取该文件。
基本上我想使用 spark read 从文件中读取数据
我们期待三种类型的分隔符 (, ; |) 即(逗号、分号、竖线)
csv_data = spark.read.load("path of file", format = "csv",header ='true').cache()
【问题讨论】:
标签:
python
apache-spark
pyspark
delimiter
【解决方案1】:
我们可以使用 .textFile 来获取 first 行 csv 文件并捕获 delimiter 分配给变量。
Example:
#sample data
$ cat test.csv
#NAME|AGE|COUNTRY
#a|18|USA
#b|20|Germany
#c|23|USA
#read as textfile and get first row then createdataframe with stringtype
#using regexp_extract function matching only ,|; and extracting assign to delimiter
delimiter=spark.createDataFrame(sc.textFile("file_path/test.csv").take(1),StringType()).\
withColumn("chars",regexp_extract(col("value"),"(,|;|\\|)",1)).\
select("chars").\
collect()[0][0]
delimter
#u'|'
#read csv file with delimiter
spark.read.\
option("delimiter",delimiter).\
option("header",True).\
csv("file_path/test.csv").show()
#+----+---+-------+
#|NAME|AGE|COUNTRY|
#+----+---+-------+
#| a| 18| USA|
#| b| 20|Germany|
#| c| 23| USA|
#+----+---+-------+
【解决方案2】:
我在笔记本中使用了类似的东西来获取分隔符:
import re
headerList=sc.textFile("yourPath").take(1)
headerString = ''.join(headerList)
result = re.search("(,|;|\\|)", headerString)
delimiter = result.group()