簡體   English   中英

在Spark中加載CSV

[英]Loading CSV in spark

我正在嘗試使用SparkML和Scala的Kaggle Titanic示例 我正在嘗試加載第一個訓練文件,但遇到一個奇怪的錯誤:

java.io.IOException: Could not read footer: java.lang.RuntimeException: file:/Users/jake/Development/titanicExample/src/main/resources/data/titanic/train.csv is not a Parquet file. expected magic number at tail [80, 65, 82, 49] but found [44, 81, 13, 10]

該文件是.csv文件,因此我不確定為什么要使用Parquet文件。

這是我的代碼:

object App {

  val spark = SparkSession
    .builder()
    .master("local[*]")
    .appName("liveOrDie")
    .getOrCreate()

  def main(args: Array[String]) {

    val rawTrainingData = spark.read
      .option("header", "true")
      .option("delimiter", ",")
      .option("inferSchema", "true")
      .load("src/main/resources/data/titanic/train.csv")

//    rawTrainingData.show()
  }
}

您缺少輸入格式。 要么:

val rawTrainingData = spark.read
  .option("header", "true")
  .option("delimiter", ",")
  .option("inferSchema", "true")
  .csv("src/main/resources/data/titanic/train.csv")

要么

val rawTrainingData = spark.read
  .option("header", "true")
  .option("delimiter", ",")
  .option("inferSchema", "true")
  .format("csv")
  .load("src/main/resources/data/titanic/train.csv")

期望使用實木復合地板文件,因為這是默認文件類型

如果您使用的是Spark <2.0,則需要使用Spark-CSV 否則,如果你使用的是星火2.0+,你將能夠使用DataFrameReader使用.csv(..fname..)而不是.load(..fname..)

我似乎與pom.xml Scala版本沖突,而不是原始代碼。 我的pom.xml具有多個Scala版本,似乎引起了問題。 我使用動態屬性<scala.dep.version>2.11</scala.dep.version>將使用Scala的所有依賴項更新為相同版本,並解決了該問題。

您必須將databricks的依賴項jar添加到pom中。 較低版本的spark不提供用於讀取csv的api。 下載后,您可以編寫如下內容。

val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
// Use first line of all files as header
.option("inferSchema", "true")
// Automatically infer data types
.load("cars.csv")

參考網址: https : //github.com/databricks/spark-csv/blob/master/README.md

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM