我正在使用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()
}
}
答案 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