在火花中加载 CSV
Loading CSV in spark
我正在尝试使用 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()
}
}
您缺少输入格式。或者:
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")
它需要一个 parquet 文件,因为那是 default file type。
如果您使用的是 Spark < 2.0,您将需要通过使用 .csv(..fname..)
而不是 .load(..fname..)
来使用 Spark-CSV. Otherwise if you are using Spark 2.0+ you will be able to use the DataFrameReader
。
我的 pom.xml
中的 Scala 版本似乎与我的原始代码有冲突。我的 pom.xml
有多个 Scala 版本似乎导致了问题。我使用动态 属性 <scala.dep.version>2.11</scala.dep.version>
将所有使用 Scala 的依赖项更新为相同版本并解决了问题。
您必须从 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")
参考 url:https://github.com/databricks/spark-csv/blob/master/README.md
我正在尝试使用 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()
}
}
您缺少输入格式。或者:
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")
它需要一个 parquet 文件,因为那是 default file type。
如果您使用的是 Spark < 2.0,您将需要通过使用 .csv(..fname..)
而不是 .load(..fname..)
来使用 Spark-CSV. Otherwise if you are using Spark 2.0+ you will be able to use the DataFrameReader
。
我的 pom.xml
中的 Scala 版本似乎与我的原始代码有冲突。我的 pom.xml
有多个 Scala 版本似乎导致了问题。我使用动态 属性 <scala.dep.version>2.11</scala.dep.version>
将所有使用 Scala 的依赖项更新为相同版本并解决了问题。
您必须从 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")
参考 url:https://github.com/databricks/spark-csv/blob/master/README.md