2015-11-10 3 views
4

Я работаю с пакетом spark-csv Databricks (через Scala API) и имеет проблемы с определением настраиваемой схемы.ошибка перегруженного метода с использованием spark-csv

После запуска консоли с

spark-shell --packages com.databricks:spark-csv_2.11:1.2.0 

импортировать мои необходимые типы

import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType} 

, а затем просто попытаться определить эту схему:

val customSchema = StructType(
    StructField("user_id", IntegerType, true), 
    StructField("item_id", IntegerType, true), 
    StructField("artist_id", IntegerType, true), 
    StructField("scrobble_time", StringType, true)) 

, но я получаю следующее ошибка:

<console>:26: error: overloaded method value apply with alternatives: 
    (fields: Array[org.apache.spark.sql.types.StructField])org.apache.spark.sql.types.StructType <and> 
    (fields: java.util.List[org.apache.spark.sql.types.StructField])org.apache.spark.sql.types.StructType <and> 
    (fields: Seq[org.apache.spark.sql.types.StructField])org.apache.spark.sql.types.StructType 
cannot be applied to (org.apache.spark.sql.types.StructField, org.apache.spark.sql.types.StructField, org.apache.spark.sql.types.StructField, org.apache.spark.sql.types.StructField) 
     val customSchema = StructType(

Я очень новичок в scala, поэтому, не разобравшись в этом, но что я делаю неправильно здесь? Я следую очень простому примеру here.

ответ

5

Вам необходимо передать комплект StructField в качестве Seq.

Что-то, как и любой из следующих работ:

val customSchema = StructType(Seq(StructField("user_id", IntegerType, true), StructField("item_id", IntegerType, true), StructField("artist_id", IntegerType, true), StructField("scrobble_time", StringType, true))) 

val customSchema = (new StructType) 
    .add("user_id", IntegerType, true) 
    .add("item_id", IntegerType, true) 
    .add("artist_id", IntegerType, true) 
    .add("scrobble_time", StringType, true) 

val customSchema = StructType(StructField("user_id", IntegerType, true) :: StructField("item_id", IntegerType, true) :: StructField("artist_id", IntegerType, true) :: StructField("scrobble_time", StringType, true) :: Nil) 

Я не знаю, почему он не представил, как это на README, но если вы обратитесь к документации StructType, это ясно говорит об этом.

+1

Работает отлично. Но да, к сожалению, пример в документации неправильный ... – moustachio

Смежные вопросы