使用Scala API将TSV读入Spark Dataframe

Mic*_*nza 21 scala apache-spark

我一直在尝试让用于读取CSV的数据库库工作.我正在尝试使用scala api将hive创建的TSV读入spark数据框.

这是一个可以在spark shell中运行的示例(我公开了示例数据,因此它可以为您工作)

import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType};

val sqlContext = new SQLContext(sc)
val segments = sqlContext.read.format("com.databricks.spark.csv").load("s3n://michaeldiscenza/data/test_segments")
Run Code Online (Sandbox Code Playgroud)

文件说,你可以指定分隔符,但我不清楚如何指定选项.

Mic*_*nza 33

所有选项参数都在option()函数中传递,如下所示:

val segments = sqlContext.read.format("com.databricks.spark.csv")
    .option("delimiter", "\t")
    .load("s3n://michaeldiscenza/data/test_segments")
Run Code Online (Sandbox Code Playgroud)

  • 对于使用SparkSession的本机DataFrameReader,该选项称为"sep":`spark.read.option("sep","\ t").csv("PATH")` (13认同)

Sha*_*ica 23

使用Spark 2.0+时,请使用内置CSV连接器以避免第三方依赖性和更好的性能:

val spark = SparkSession.builder.getOrCreate()
val segments = spark.read.option("sep", "\t").csv("/path/to/file")
Run Code Online (Sandbox Code Playgroud)

  • 这是较新的 Spark 的正确答案。我几乎不会将 databricks 称为第 3 方,尽管考虑到它们对 Spark 开源的贡献以及`com.databricks.spark.csv` 基本上是内置于 csv 连接器中的内容,但总体来说是公平的。 (2认同)