我使用spark 3,下面是我的代码来读取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不要将列值中的逗号视为分隔符。
我怀疑这是因为空白。引号必须紧跟着分隔符(逗号)。您可以通过指定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");