Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将dataframe转换为case类?_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala 如何将dataframe转换为case类?

Scala 如何将dataframe转换为case类?,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,大量文档表明,从一个案例类到一个数据框架是可能的,但我还没有找到一个从一个数据框架到一个案例类的好方法 假设我有一个包含50列的数据框,但我想从中选择大约5列,并将其放入一个新表中。我可以这样做: sqlContext.sql("select [1, 2, 3, 4, 5] from test").registerTempTable("newTable") 但是新表将有一些其他列,如6、7作为自定义值(或者现在为0,但测试表中不存在此列)。 为了解决这个问题,我尝试创建一个如下所示的case类

大量文档表明,从一个案例类到一个数据框架是可能的,但我还没有找到一个从一个数据框架到一个案例类的好方法

假设我有一个包含50列的数据框,但我想从中选择大约5列,并将其放入一个新表中。我可以这样做:

sqlContext.sql("select [1, 2, 3, 4, 5] from test").registerTempTable("newTable")
但是新表将有一些其他列,如6、7作为自定义值(或者现在为0,但测试表中不存在此列)。 为了解决这个问题,我尝试创建一个如下所示的case类:

case class newTable(1, 2, 3, 4, 5, 6, 7)
dataframe.select($"1".as("1"), $"2".as("2"), $"3".as("3"), $"4".as("4"), $"5".as("5")).as[newTable]
最后,我想从测试表中提取第1列到第5列,然后输入6,7我想输入的任何内容。我只是没有找到一个好的方法来做这件事。

你可以这样使用:

case class newTable(1, 2, 3, 4, 5, 6, 7)
dataframe.select($"1".as("1"), $"2".as("2"), $"3".as("3"), $"4".as("4"), $"5".as("5")).as[newTable]
注:
您应该将列名与case类中的字段名相匹配

如何将其与我创建的case类合并?此外,我还遇到了一个错误:错误:重载方法值与可选方法一样:(别名:Symbol)org.apache.spark.sql.DataFrame(别名:String)org.apache.spark.sql.DataFrame不接受类型参数,因为您的case类和name列dosnt matchI试图将case类类型与控制台上显示的内容相匹配:错误:重载方法值选择和可选项:(col:String,cols:String*)org.apache spark.sql.DataFrame(cols:org.apache.spark.sql.column*))无法将org.apache.spark.sql.DataFrame应用于(org.apache.spark.sql.Column、org.apache.spark.sql.Column、org.apache.spark.sql.Column、String、Int、Long、Long)但仍会出现此错误我建议您使用SparkSession我认为您只需在选择后使用
with Column
,即可添加新列