【问题标题】: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 分配给变量。

    • 使用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|
    #+----+---+-------+
    

    【讨论】:

      【解决方案2】:

      我在笔记本中使用了类似的东西来获取分隔符:

      import re
      headerList=sc.textFile("yourPath").take(1)
      headerString = ''.join(headerList)
      
      result = re.search("(,|;|\\|)", headerString)
      delimiter = result.group()
      

      【讨论】:

        猜你喜欢
        • 2021-12-29
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多