Spark - csv读取选项

J.D*_*one 6 apache-spark

我正在使用spark 2.1并试图读取csv文件.

compile group: 'org.scala-lang', name: 'scala-library', version: '2.11.1'
compile group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.1.0'
Run Code Online (Sandbox Code Playgroud)

这是我的代码.

import java.io.{BufferedWriter, File, FileWriter}
import java.sql.{Connection, DriverManager}
import net.sf.log4jdbc.sql.jdbcapi.ConnectionSpy
import org.apache.spark.sql.{DataFrame, SparkSession, Column, SQLContext}
import org.apache.spark.sql.functions._
import org.postgresql.jdbc.PgConnection

spark.read
    .option("charset", "utf-8")
    .option("header", "true")
    .option("quote", "\"")
    .option("delimiter", ",")
    .csv(...)
Run Code Online (Sandbox Code Playgroud)

它运作良好.问题是spark read(DataFrameReader)选项键与reference(link)不同.参考说我应该使用'encoding'进行编码但不能正常工作,但charset运行良好.参考是错的吗?

soo*_*ote 5

你可以在这里看到:

val charset = parameters.getOrElse("encoding", 
       parameters.getOrElse("charset",StandardCharsets.UTF_8.name()))
Run Code Online (Sandbox Code Playgroud)

encoding 和 charset 都是有效的选项,在设置编码时使用它们应该没有问题。

当 spark csv 代码来自databricks spark csv project 时,Charset 只是为了遗留支持,该项目自 2.x 以来已合并到 spark 项目中。这也是分隔符(现在是 sep)的来源。

请注意 csv 读取器的默认值,您可以从代码中删除字符集、引号和分隔符,因为您只是使用默认值。简单地留给你:

spark.read.option("header", "true").csv(...)
Run Code Online (Sandbox Code Playgroud)