【问题标题】:Reading TSV into Spark Dataframe with Scala API使用 Scala API 将 TSV 读入 Spark Dataframe
【发布时间】:2016-02-27 03:40:12
【问题描述】:

我一直在尝试让用于读取 CSV 的 databricks 库正常工作。我正在尝试使用 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")

documentation 说您可以指定分隔符,但我不清楚如何指定该选项。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

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

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

    【讨论】:

    • 对于带有 SparkSession 的本机 DataFrameReader,该选项称为“sep”:spark.read.option("sep", "\t").csv("PATH")
    • 我收到一个长错误“回溯(最近一次通话最后一次):文件“/tmp/zeppelin_pyspark-1508289913406712111.py”,第 367 行,在 中异常:回溯(最近一次通话最后一次) :文件“/tmp/zeppelin_pyspark-1508289913406712111.py”,第 360 行,在 ....文件“/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol .py", line 319, in get_return_value format(target_id, ".", name), value) Py4JJavaError: An error occurred while calling o929.load.
    • @Michael Discenza 我认为答案需要更新为最新版本的 Spark,或者问题应该包括 Spark 版本。
    【解决方案2】:

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

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

    【讨论】:

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

    您也可以尝试推断架构并检查架构。

    val df = spark.read.format("csv")
          .option("inferSchema", "true")
          .option("sep","\t")
          .option("header", "true")
          .load(tmp_loc)
    
       df.printSchema()
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 2017-06-21
      • 2022-01-13
      • 2019-10-22
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2016-09-12
      相关资源
      最近更新 更多