重载方法值适用于替代方案:

时间:2017-12-20 19:05:53

标签: scala apache-spark

我是新来的火花,我试图为json数据定义一个模式,并在(spark-shell,

中遇到以下错误
<console>:28: 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)
       val schema = StructType(Array(StructField("type", StructType(StructField("name", StringType,   true), StructField("version", StringType,   true)), true) :: StructField("value", StructType(StructField("answerBlacklistedEntities", StringType,   true) :: StructField("answerBlacklistedPhrase", StringType,   true) :: StructField("answerEntities", StringType,   true) :: StructField("answerText", StringType,   true) :: StructField("blacklistReason", StringType,   true) :: StructField("blacklistedDomains", StringType,   true) :: StructField("blacklistedEntities", ArrayType(StringType, true), true) :: StructField("customerId", StringType,   true) :: StructField("impolitePhrase", StringType,   true) :: StructField("isResponseBlacklisted", BooleanType,   true) :: StructField("queryString", StringType,   true) :: StructField("utteranceDomains", StringType,   true) :: StructField("utteranceEntities", ArrayType(StringType, true), true) :: StructField("utteranceId", StructType(StructField("identifier", StringType, true)), true)) :: Nil)))

有人可以指导我这里发生了什么吗? :)我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

这是因为:

val schema = StructType(Array(StructField("type", 
   StructType(StructField("name", StringType,   true), ...))

您创建StructType并传递StructField作为参数,而它应该是StructFields的序列:

val schema = StructType(Array(StructField("type", 
   StructType(Array(StructField("name", StringType,   true), ...)) ...)