sbt编译spark程序提示value toDF is not a member of Seq()

sbt编译spark程序提示value toDF is not a member of Seq()

前提

使用Scala编写的Spark程序,在sbt编译打包的时候提示value toDF is not a member of Seq(),出问题的代码如下:

val urlDS = Seq(STU(age, count)).toDS()

其中STU是一个定义的case class,定义如下:

case class STU(age: Int, count: Int)
查找原因

开始以为是toDS()用错了,但是去官网看,用法没有问题,如下:

case class Person(name: String, age: Long)

// Encoders are created for case classes
val caseClassDS = Seq(Person("Andy", 32)).toDS()
caseClassDS.show()
// +----+---+
// |name|age|
// +----+---+
// |Andy| 32|
// +----+---+

同时,如果我把代码拷贝到spark-shell里运行,完全木有问题,这就很奇怪了。

最终原因

用法没错,于是我只能去谷歌了,找到了这个页面,发现问题基本上是一个问题,该引入的包也都引用了,但是还有这个问题,但是仔细看还有一句话:

Move case class outside of the method: case class, by use of which you define the schema of the DataFrame, should be defined outside of the method needing it. You can read more about it here: https://issues.scala-lang.org/browse/SI-6649

意思是,case class的定义要在引用case class函数的外面。因为我只有一个main函数,所以把case class挪到了外面,然后好了 - -。

时间: 2024-10-18 10:49:04

sbt编译spark程序提示value toDF is not a member of Seq()的相关文章

用SBT编译Spark的WordCount程序

问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要java1.6以上. sbt项目环境建立 sbt编译需要固定的目录格式,并且需要联网,sbt会将依赖的jar包下载到用户home的.ivy2下面,目录结构如下: |--build.sbt |--lib |--project |--src | |--main | | |--scala | |--tes

window环境下使用sbt编译spark源码

前些天用maven编译打包spark,搞得焦头烂额的,各种错误,层出不穷,想想也是醉了,于是乎,换种方式,使用sbt编译,看看人品如何! 首先,从官网spark官网下载spark源码包,解压出来.我这边使用的是1.4.0版本. 然后,我们需要把sbt配置好,配置很简单,无非就是SBT_HOME什么的,大家可以参考官网给出的安装配置手册. 在window的命令行模式下进入刚刚解压的spark源码目录下,我们根据官网提示的命令输入: sbt -Pyarn -Phadoop-2.3 assembly

基于IDEA使用Spark API开发Spark程序

清明假期折腾了两天,总结了两种方式使用IDE进行spark程序,记录一下: 第一种方法比较简单,两种方式都是采用SBT进行编译的. 注意:本地不需要安装Scala程序,否则在编译程序时有版本兼容性问题. 一.基于Non-SBT方式 创建一个Scala IDEA工程 我们使用Non-SBT的方式,点击"Next" 命名工程,其他按照默认 点击"Finish"完成工程的创建 修改项目的属性 首先修改Modules选项 在src下创建两个文件夹,并把其属性改为source

sbt自定义spark参数

开发spark程序时,需要依赖于spark的jar包,因此需要将spark的jar包的作用域(scope)设置成compile,如果设置成provided的话,会提示找不到ClassNotFoundException的错误.但在线上服务构建时,又需要将作用域改成provided.那么build.sbt怎么写才可以呢?这里提供一个方法,可以用以下方法: val spark_scope = System.getProperty("spark.scope", "compile&qu

Linux下静态编译Qt程序

一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序,这个程序在发给别人后,他们可以直接打开,而不需要特别地去先安装Qt库,那就需要采用静态编译了. 在Linux下如何静态编译Qt程序呢? 首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先是需要一个静态编译安装的Qt   1.下载源安装程序,如 qt-x11-opensource-src-4.

Spark-1.0.1 的make-distribution.sh编译、SBT编译、Maven编译 三种编译方法

本文编译方法所支持的hadoop环境是Hadoop-2.2.0,YARN是2.2.0,JAVA版本为1.8.0_11,操作系统Ubuntu14.04 Spark1.0.0 源码下载地址: http://mirror.bit.edu.cn/apache/spark/spark-1.0.0/spark-1.0.0.tgz Spark1.0.1 源码下载地址:http://apache.fayea.com/apache-mirror/spark/spark-1.0.1/spark-1.0.1.tgz

如何运行Spark程序

[[email protected] spark-2.0.2-bin-hadoop2.6]# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/jars/spark-examples_2.11-2.0.2.jar 注意在hxsyl下,在root下运行提示hdfs上的historyserverforSpark没有权限,擦,好奇怪啊,另外运行后在hdfs上查看结果spark的用户是

objective-c 创建工程/编译/运行程序

// First program example #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSLog (@"Programming is fun!"); } return 0; } 在开始解释这程序之前,我们需要先讲述下编译和运行的步骤.你可以使用xcode来编译运行,或者你也可以在终端使用oc的编译命令来编译运行.此处只介

[转]编译VC++程序warning C4819快速解决

文章来自:http://www.cppblog.com/API/archive/2012/11/12/195056.aspx 编译VC++程序的时候出现如下提示警告: warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss 因为只是一个war