有什么区别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岁了
答案 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
,您只需获得String
和List[String]
希望这有帮助!