【问题标题】:SPARK-Read file with multi character delimiter with multiline option带有多行选项的多字符分隔符的 SPARK 读取文件
【发布时间】:2021-04-26 22:57:37
【问题描述】:

如何在 spark 3.0.1 中读取具有多行选项的多字符分隔符的文件?

输入文件

company||street||city
Test1 company||1st street||city1
Test2 company||2nd street||city2
Test3 company||"3rd
 street"||city3
spark.read
        .option("delimiter", "||")
        .option("header", "true")
        .option("multiLine", "true")
        .option("inferSchema", "false")
        .csv(transformedFile)

在打印数据框时,它将总记录显示为 4 而不是 3。

records count :4
+-------------+
|company      |
+-------------+
|Test1 company|
|Test2 company|
|Test3 company|
|street"      |
+-------------+

+-------------+-----------+-----+
|company      |street     |city |
+-------------+-----------+-----+
|Test1 company|1st street |city1|
|Test2 company|2nd street |city2|
|Test3 company|3rd 
street|city3|
+-------------+-----------+-----+

如果它是单个字符分隔符,则与预期相同。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    您可以缓存数据帧以确保它被正确读取:

    val df = spark.read.option("delimiter", "||")
            .option("header", "true")
            .option("multiLine", "true")
            .option("inferSchema", "false")
            .csv(transformedFile)
    
    df.cache
    
    df.select("company").show
    +-------------+
    |      company|
    +-------------+
    |Test1 company|
    |Test2 company|
    |Test3 company|
    +-------------+
    
    df.count
    // 3
    

    【讨论】:

    • 谢谢。你能解释一下这里的“缓存”究竟是如何确保文件被正确读取的吗?
    • 我想spark在缓存时会完全遍历整个文件。如果不缓存,它将使用惰性求值加载文件,这意味着它不会遍历整个文件,并且可能会导致非标准文件格式出现问题
    • 你好,我用 Spark 3.0.1 在 Databricks 上试过这个。不幸的是,它没有用。还有其他建议吗?
    猜你喜欢
    • 2019-04-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2019-07-08
    • 2013-08-13
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多