在火花中加载CSV

时间:2016-12-08 21:09:38

标签: scala apache-spark apache-spark-ml kaggle

我正在使用SparkML和Scala尝试Kaggle Titanic Example。我试图加载第一个培训文件,但我遇到了一个奇怪的错误:

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()
  }
}

4 个答案:

答案 0 :(得分:3)

您缺少输入格式。之一:

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")

答案 1 :(得分:0)

期待镶木地板文件,因为这就是default file type

如果您使用Spark< 2.0,您需要使用Spark-CSV。否则,如果您使用的是Spark 2.0+,则可以使用.csv(..fname..)代替.load(..fname..)来使用DataFrameReader

答案 2 :(得分:0)

我似乎与我的pom.xml中的Scala版本存在冲突,而不是原始代码。我的pom.xml有多个Scala版本似乎导致了问题。我使用动态属性<scala.dep.version>2.11</scala.dep.version>将使用Scala的所有依赖项更新到同一版本,并修复了问题。

答案 3 :(得分:0)

您必须将databricks中的依赖jar添加到您的pom中。较低版本的spark不提供api来读取csv。下载后,您可以写下面的内容..

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