Scala 如何创建数据框:列数不为';不匹配

Scala 如何创建数据框:列数不为';不匹配,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我得到一个错误: java.lang.IllegalArgumentException:需求失败:数量 列不匹配。旧列名(4):\u 1、\u 2、\u 3、\u 4新列 名称(1):'srcId','srcLabel','dstId','dstLabel' 在此代码中: val columnNames = """'srcId', 'srcLabel', 'dstId', 'dstLabel'""" import spark.sqlContext.implicits._ var df = S

我得到一个错误:

java.lang.IllegalArgumentException:需求失败:数量 列不匹配。旧列名(4):\u 1、\u 2、\u 3、\u 4新列 名称(1):'srcId','srcLabel','dstId','dstLabel'

在此代码中:

val columnNames = """'srcId', 'srcLabel', 'dstId', 'dstLabel'"""

import spark.sqlContext.implicits._

var df = Seq.empty[(String, String, String, String)]
  .toDF(columnNames)

您的方法的问题是,
columnNames
是一个字符串,而您已经定义了空字符串的
tuple4
。因此,您必须将
columnNames
字符串拆分为四个字符串,并传递给
toDF

正确的方法是按以下步骤进行

val columnNames = """'srcId', 'srcLabel', 'dstId', 'dstLabel'"""

var df = Seq.empty[(String, String, String, String)]
  .toDF(columnNames.split(","): _*)
这将为您提供一个空的数据帧

+-------+-----------+--------+-----------+
|'srcId'| 'srcLabel'| 'dstId'| 'dstLabel'|
+-------+-----------+--------+-----------+
+-------+-----------+--------+-----------+

我希望答案是有帮助的

您的方法的问题是,
columnNames
是一个字符串,而您定义了空字符串的
tuple4
。因此,您必须将
columnNames
字符串拆分为四个字符串,并传递给
toDF

正确的方法是按以下步骤进行

val columnNames = """'srcId', 'srcLabel', 'dstId', 'dstLabel'"""

var df = Seq.empty[(String, String, String, String)]
  .toDF(columnNames.split(","): _*)
这将为您提供一个空的数据帧

+-------+-----------+--------+-----------+
|'srcId'| 'srcLabel'| 'dstId'| 'dstLabel'|
+-------+-----------+--------+-----------+
+-------+-----------+--------+-----------+

我希望答案是有帮助的

为什么在
columnNames
中对列名使用三重引号?有什么原因吗?为什么要创建一个空的
df
?请改用
spark.implicits.\u
。@JacekLaskowski:你说
为什么要创建一个空df是什么意思?请改用spark.implicits.\u。
我创建了一个空数据帧,因为程序的逻辑需要它。你的意思是我可以使用spark.implicits创建它吗??我试图更好地理解你真正想做的事情。如何处理此空数据集?为什么在
columnNames
中对列名使用三重引号?有什么原因吗?为什么要创建一个空的
df
?请改用
spark.implicits.\u
。@JacekLaskowski:你说
为什么要创建一个空df是什么意思?请改用spark.implicits.\u。
我创建了一个空数据帧,因为程序的逻辑需要它。你的意思是我可以使用spark.implicits创建它吗??我试图更好地理解你真正想做的事情。如何处理此空数据集?什么是
意思?它使您能够将一系列值传递给带有varargs参数的函数。@ScalaBoy*表示将集合中的每个元素作为单个参数列表分隔。@Ramesh Maharjan-空数据集有何用途?。您能否演示如何将此空数据集信息用作..例如csv文件的架构定义?空数据集没有特殊用途。实际上,没有数据的数据库是没有用处的:)什么是
.*
意思?它使您能够将一系列值传递给带有varargs参数的函数。@ScalaBoy*意味着将集合中的每个元素作为单独的参数列表分开。@Ramesh Maharjan-空数据集有什么用?。您能否演示如何将此空数据集信息用作..例如csv文件的架构定义?空数据集没有特殊用途。实际上,没有数据的数据库是没有用的:)