python - 如何使用pyspark从文件中查找分隔符
问题描述
有没有办法找到分隔符并使用 spark read 读取该文件。基本上我想使用 spark read 从文件中读取数据
我们期待三种类型的分隔符 (, ; |) 即(逗号、分号、管道)
csv_data = spark.read.load("path of file", format = "csv",header ='true').cache()
解决方案
我们可以.textFile
用来获取first
csv 文件的行并捕获delimiter
分配给变量的内容。
- 使用
delimiter
变量读取csv文件
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|
#+----+---+-------+
推荐阅读
- html - CSS单选标签唯一颜色
- javascript - 用逗号分隔的整数正则表达式
- junit - 包含某些特定字符串但具有字符串列表的集合
- rust - 在发出的 LLVM IR 上执行哪些 LLVM 传递?
- python - PyQt QFileIconProvider 类自定义图标
- python - 使用 int|abs 时出现 Ansible Jinja 错误
- java - 多租户环境中的 javax.faces.convert.Converter
- php - laravel 5.6 轮播引导程序
- c# - 通过共享选项列表检索共享文本?
- sql-server - Talend Open Studio 是否有类似于 SSIS 的序列容器?