列值内的逗号

rdlzhqv9  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(270)

我正在使用spark3和下面是我的代码来读取csv文件

package spark.ny.project;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class MainApp {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        SparkSession session = SparkSession.builder().appName("Sample App").master("local[*]").getOrCreate();

        session.sparkContext().setLogLevel("ERROR");

        Dataset<Row> df = session.read().format("com.databricks.spark.csv").option("quote","*" ).option("sep", ",")
                .load("/home/deepak/sample_dataset/*.csv");
        df.printSchema();
        df.show(false);

    }

}

下面是csv文件的内容

CallType , Methods
Internal , *ApplyChanges,ApproveCase*

下面是我得到的输出

root
 |-- CallType : string (nullable = true)
 |--  Methods: string (nullable = true)

+---------+---------------+
|CallType | Methods       |
+---------+---------------+
|Internal | *ApplyChanges |
+---------+---------------+

“方法”列中缺少第二个值。如果我参考文件https://github.com/databricks/spark-csv#features,当使用引号选项时,引号内的分隔符将被忽略。
我不知道为什么我会得到那个输出,如何告诉spark不要把列值中的逗号当作分隔符。

sxpgvts3

sxpgvts31#

我怀疑那是因为空白。引号必须紧跟在分隔符(逗号)后面。您可以通过指定 ignoreLeadingWhiteSpace 以及 ignoreTrailingWhiteSpace .

Dataset<Row> df = session.read().format("com.databricks.spark.csv")
                         .option("quote", "*")
                         .option("sep", ",")
                         .option("ignoreLeadingWhiteSpace", "true")
                         .option("ignoreTrailingWhiteSpace", "true")
                         .load("/home/deepak/sample_dataset/*.csv");

相关问题