差异b / w val df = List((“amit”,“porwal”))和val df = List(“amit”,“porwal”)

时间:2018-04-20 07:13:38

标签: scala

有什么区别b / w

val df = List(("amit","porwal")) 

val df = List("amit","porwal")

我的问题是2个括号是如何产生影响的。因为在做

scala > val df = List(("amit","porwal")).toDF("fname","lname")

它有效,但在做

scala > val df = List("amit","porwal").toDF("fname","lname")

scala引发了我的错误

  
    

java.lang.IllegalArgumentException:要求失败:         列数不匹配。旧列名(1):值新列名(2):         fname,lname -         在scala.Predef $ .require(Predef.scala:224)         在org.apache.spark.sql.Dataset.toDF(Dataset.scala:393)         在org.apache.spark.sql.DatasetHolder.toDF(DatasetHolder.scala:44)         ...... 48岁了

  

2 个答案:

答案 0 :(得分:1)

是的,他们是不同的。内部的 paranthesis被scala编译器视为元组。由于第一个示例的嵌套括号内有两个字符串值,因此它将被视为Tuple2(String, String)。在第二个示例中,List中的字符串值被视为单独的元素String

第一个 val df = List(("amit","porwal"))List[Tuple2(String, String)]。 df 中只有一个元素,要获得 porwal ,您必须df(0)._2

第二个 val df = List("amit","porwal")List[String]。 df 中有两个元素,要获得 porwal ,您必须df(1)

答案 1 :(得分:1)

即使问题与spark无关

val df = List(("amit","porwal")) 

此处df是list的{​​{1}} Tuple2,要获得值List[(String, String)],您应该使用"amit"df(0)._1 {{ 1}}

"porwal"

以下是df(0)._2的{​​{1}} df val df = List("amit","porwal") 如果是list,您只需获得StringList[String]

即可

希望这有帮助!