-
【功能模块】【操作步骤&问题现象】1、sparkstreaming对接kafka,应用使用scala里面,应用里面调用了python 有一些python的算法。2、提交spark任务后里面的算法跑在集群里,发现缺少numpy依赖,3、求助:在集群配置依赖仍然调不到,且在集群配置比较危险会影响其他服务环境,所以这种场景应该怎么创造spark程序运行的环境呢?【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
1. Scala简介scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程。(Scala这个名字来源于“scalable language”,即“可伸缩的语言”)早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性。接下来,我们要来学习:为什么要使用scala?通过两个案例对比Java语言和scala语言2. 为什么使用scala开发大数据应用程序(Spark程序、Flink程序)表达能力强,一行代码抵得上Java多行,开发速度快兼容Java,可以访问庞大的Java类库,例如:操作mysql、redis、freemarker、activemq等等3. Scala对比Java下面通过两个案例,分别使用java和scala实现的代码数量定义三个实体类(用户、订单、商品)for java:/** * 用户实体类 */ public class User { private String name; private List<Order> orders; public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Order> getOrders() { return orders; } public void setOrders(List<Order> orders) { this.orders = orders; } } /** * 订单实体类 */ public class Order { private int id; private List<Product> products; public int getId() { return id; } public void setId(int id) { this.id = id; } public List<Product> getProducts() { return products; } public void setProducts(List<Product> products) { this.products = products; } } /** * 商品实体类 */ public class Product { private int id; private String category; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } }for scala:case class User(var name:String, var orders:List[Order]) // 用户实体类 case class Order(var id:Int, var products:List[Product]) // 订单实体类 case class Product(var id:Int, var category:String) // 商品实体类
-
object tem{def dups[T](list: List[T]) = list.foldLeft(List.empty[T]){ (seen, cur) => if(seen.contains(cur)) (seen) else (seen :+ cur) } //非泛型实现 def duplicate[Int](list: List[Int]) = list.foldLeft(List.empty[Int]){ (result, cur) => if(result.contains(cur)) result else result :+ cur } // // // def main(args: Array[String]) { // println(countWords("Jack,gates,jack,Lucy:jack,Gates!")) val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102) val list = List("aa","dd","aa","vv","dd") println(duplicate(dup)) println(dups(dup)) println(dups(list)) }运行效果:root@ecs-385f:~# scala tem.scala warning: 1 deprecation (since 2.13.0); re-run with -deprecation for detailsList(1, 2, 3, 4, 5, 6, 100, 101, 102)List(1, 2, 3, 4, 5, 6, 100, 101, 102)List(aa, dd, vv)
-
test.scala:object WordCount { def main(args: Array[String]):Unit={ var ar = Array("#","$","¥") w(ar); map(); } def w(args: Array[String]): Unit = { args.foreach(arg => println(arg)) var r = 1 var a = Array(1,2,3,4,5,6,7,8) for (i <- 1 to a.length){ r = r * i } println(r); } def map(): Unit = { var map = Map(1 -> "one", 2 -> "two", 3 -> "three") map += (4 -> "4th") map.foreach(value => println(value + " ")) } } root@ecs-385f:~# scala test.scalawarning: 1 deprecation (since 2.13.0); re-run with -deprecation for details#$¥40320(1,one) (2,two) (3,three) (4,4th)
-
import scala.io.StdInobject ForDmo02 { def main(args: Array[String]): Unit = { val classNum = 2//表示班级个数 val stuNum = 3//表示学生个数 var score = 0.0//表示各个学生的成绩 var classScore = 0.0//班级的总分 var totalScore = 0.0//所有班级总分 for (i <- 1 to classNum) { classScore = 0.0//先将classScore清零 for (j <- 1 to stuNum){ printf("请输入第%d班级的第%d学生的成绩\n",i ,j ) score = StdIn.readDouble() classScore +=score } //积累totalscore totalScore += classScore printf("第%d班班级的平均分为%.2f\n",i,classScore/stuNum) } printf("所有班级的平均分为%.2f",totalScore/(stuNum*classNum)) } }root@ecs-385f:~# scala fenshu.scala请输入第1班级的第1学生的成绩22请输入第1班级的第2学生的成绩33请输入第1班级的第3学生的成绩11第1班班级的平均分为22.00请输入第2班级的第1学生的成绩99请输入第2班级的第2学生的成绩87请输入第2班级的第3学生的成绩67第2班班级的平均分为84.33所有班级的平均分为53.17root@ecs-385f:~# 原代码改自:https://blog.csdn.net/realize_dream/article/details/85281586
-
scala 最新的版本2.13.5小提示:如果网络受限而不能下载,换个移动网络环境试试。官网地址:https://www.scala-lang.org/download/ubuntu版本下载链接:https://downloads.lightbend.com/scala/2.13.5/scala-2.13.5.tgz下载后解压缩:sudo tar -xzvf scala-2.13.5.tgz -C /usr/localsudo mv scala-2.13.5 scala 设置环境变量:vi /etc/profile在文件的末尾追加:export SCALA_HOME=/usr/local/scala export PATH=$SCALA_HOME/bin:$PATH:wqroot@ecs-385f:~# source /etc/profileroot@ecs-385f:~# scalaWelcome to Scala 2.13.5 (OpenJDK 64-Bit Server VM, Java 11.0.10).Type in expressions for evaluation. Or try :help.scala>
-
## 1 - 问题描述 ### 1.1 背景说明 为客户提供样例代码,测试中需要对 Java + Scala 编写的 Maven 项目进行编译打包,由于 依赖了部分外部 jar 包,也就是有部分 jar 包没有在 pom.xml 中指定,导致编译失败。 ### 1.2 存在的问题 原有样例代码中,pom.xml 引入了 `org.scala-tools.maven-scala-plugin` 插件(),用于打包 Scala 项目,其配置方式如下: ```xml <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <configuration> <recompileMode>modified-only</recompileMode> </configuration> <executions> <execution> <id>main-scalac</id> <phase>process-resources</phase> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> </executions> </plugin> ``` 该插件从2011年起就没有更新过,官网地址也已失效,无法找到有效的支持文档。 ## 2 - 问题解决 ### 2.1 方法一:通过scope=system引入外部依赖 Maven 支持在 dependency 中引入系统依赖,其中 `scope = system` 与 `scope = provided` 的依赖范围一致:**只在编译和测试范围内有效,运行时范围内无效**。具体配置示例如下: ```xml <dependency> <groupId>com.huawei.bigdata</groupId> <artifactId>spark-client</artifactId> <scope>system</scope> <systemPath>${project.basedir}/libs/spark-client.jar</systemPath> </dependency> ``` 将所有的外部 jar 包都通过这种方式引入,即可正常编译。 但由于外部依赖包通常都会比较多,这种方式维护成本太高,所以不予考虑。 ### 2.2 方法二:通过新插件指定外部依赖 经过搜索,找到了一款新插件:,pom.xml 中这样配置: ```xml <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <id>scala-compile-first</id> <phase>process-resources</phase> <goals> <goal>add-source</goal> <goal>compile</goal> </goals> </execution> <execution> <id>scala-test-compile</id> <phase>process-test-resources</phase> <goals> <goal>add-source</goal> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <args> <!-- 编译时使用 libs 目录下的 jar 包,通过 mvn scala:help 查看说明 --> <arg>-extdirs</arg> <arg>${project.basedir}/libs</arg> </args> <scalaVersion>2.11.8</scalaVersion> </configuration> </plugin> ``` 通过 -extdirs 参数,指定外部依赖的 jar 包。 其他参数的查看:在终端窗口中,通过命令 mvn scala:help 查看主要配置项参数,例如: ![image.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202008/04/165332edbzm0f9p28he0vu.png) 更详细的使用说明,请参考: **编译、打包用法:** (1) 直接在 IDEA 的 Maven -> Project -> Lifecucle -> compile | package 进行编译或打包; (2) 在终端窗口,通过如下命令进行编译打包: ```bash mvn clean scala:compile compile package ``` 说明:在 compile 前加 scala:compile,这是该插件提供的选项,表示:先编译scala,再编译java,最后打包。
-
1 简介 Scala-compiler,是scala语言的一个编译器。2 编译环境配置2.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12 /opt/tools/installed/配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source /etc/profile2.2 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATHexport MAVEN_HOME JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:<!--默认在“~/.m2/”目录下,修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository> <!--修改成自己搭建的maven仓库,ARM使能后的jar包替换到该仓库--><mirror></mirror>2.3 安装ant下载ant 1.7.1版本并解压:wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gztar -xzf apache-ant-1.7.1-bin.tar.gz运行下面命令,使修改的环境变量生效:JAVA_HOME=/opt/tools/installed/jdk8u191-b12ANT_HOME=/opt/tools/apache-ant-1.7.1MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/libPATH=$ANT_HOME/bin:$JAVA_HOME/bin:$PATHexport MAVEN_HOME JAVA_HOME ANT_HOME CLASSPATH PATH 运行下面命令,使修改的环境变量生效:source /etc/profile 3 组件编译安装 1)从github官方网站下载对应版本源码并解压git clone https://github.com/scala/scala.gitcd scalagit checkout v2.11.72)编译jline-2.12.1,参考链接https://bbs.huaweicloud.com/forum/thread-22742-1-1.html编译并将编译过后的jline-2.12.1.jar替换到maven本地仓库3)执行编译ant会在./build/pack/lib目录下生成对应的jar包:将scala-compiler.jar重命名为scala-compiler-2.11.7.jar
-
1、简介Scala-compiler是scala语言的一个编译器。类别:编译器2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.6Kernel4.14软件包 Scala-compiler2.11.8https://github.com/scala/scala.git3、依赖安装1)安装操作系统自带依赖软件版本yum install git gcc gcc-c++ make cmake libtool autoconf automake ant java-1.8.0-openjdk java-1.8.0-openjdk-devel-y2)安装Maven简介:通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。安装软件:apache-maven-3.5.4-bin.tar.gzwget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/hadoopapps/apache-maven/配置mvn的环境变量vim /etc/profileexport M2_HOME=/usr/local/hadoopapps/apache-maven/apache-maven-3.5.4 export PATH=$M2_HOME/bin:$PATH 使环境变量生效source /etc/profile测试是否安装完成mvn –v3)安装jline-2.12.1 安装jansi-native为保证jansi编译成功后的jar包包含的so文件为aarch64 架构,需要优先编译jansi-native,通过在jansi的解压目录下使用mvn dependency:tree 命令可以查看到所依赖的jansi-native的版本号为1.5,故对jansi-native-1.5进行编译,并打入maven本地仓库。wget https://github.com/fusesource/jansi-native/archive/jansi-native-1.5.tar.gztar –xvf jansi-native-1.5.tar.gzcd jansi-native-1.5mvn -Dplatform=linux64 install编译过程中如果出现如下问题 在编译的库目录下,找到'configure.ac',用文本编辑器打开,找到类似以下的文本,在最后一行添加AM_PROG_AR即可。 进入 ./target/native-build,执行以下两步后重新编译。aclocalautomake --add-missing编译好的jar包在target目录下 安装jansi-1.11下载源码wget https://github.com/fusesource/jansi/archive/jansi-1.11.tar.gz解压tar –xzvf jansi-1.11.tar.gz进入jansi目录cd jansi-jansi-project-1.11vim pom.xml 修改pom.xml,注释掉下边内容 mvn install -Dmaven.javadoc.skip=true编译完成后生成的jar包在target目录下,若编译是未加install参数,则可以手动将jansi-1.5.jar放至maven本地仓库,以保证编译jline时调取我们已编译好的jar包。编译jline-2.12.1编译jline-2.12.1的依赖关系为jansi-1.11,此时在本地maven库已经安装了包含aarch64的so文件的jansi-1.11.jar包,故可以直接开始编译。下载源码wget https://github.com/jline/jline2/archive/jline-2.12.1.tar.gz解压tar -xzvf jline-2.12.1.tar.gzcd jline-2.12.1mvn install package编译完成后生成的jar包已经放至target目录下和本地仓库内4、组件编译cd /optgit clone https://github.com/scala/scala.gitcd scalagit checkout v2.11.8执行命令进行编译ant5、系统配置 无6、测试验证编译好的Scala-compiler.jar中.so库的架构。mkdir tmpcd tmp/cp /opt/scala/build/pack/lib/scala-compiler ./jar xf Scala-compiler.jarfind ./ -name *.sofile ./META-INF/native/linux64/libjansi.so 如下图所示 7、参考信息 无8、FAQ 无
-
1 Scala简介Scala一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言 、并集成面向对象编程和函数式编程的各种特性。Scala是一种纯面向对象的语言,每一个值都是对象。对象的数据类型以及行为由类和特征(Trait)描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入(Mixin)机制。这两种途径能避免多重继承的种种问题。 2 环境信息2.1 环境信息类别子项版本获取地址OSCentOS7.5 Aarch64href="https://www.centos.org/download/" https://www.centos.org/download/服务器配置16U16GB40GB软件Scala2.13.0https://downloads.lightbend.com/scala/2.13.0/scala-2.13.0.zip3 软件移植3.1 环境准备:OS安装类型:CentOS-7.5-aarch64-1804。 注:操作系统安装使用最小简化版安装(如上图),其余步骤安装一般安装操作系统步骤即可。 3.1.1 相关软件下载上传:1、 上传CentOS 7.5系统ISO镜像文件至服务器2、 上传scala-2.13.0.zip源码包至服务器目录下,如/opt, 下载地址如下:https://downloads.lightbend.com/scala/2.13.0/scala-2.13.0.zip 3.2 安装Scala1、 安装Scala上传附件脚本至要安装Scala的服务器上的任意目录,如/opt。添加执行权限:chmod +x /opt/ scala _install.sh执行脚本sh /opt/scala _install.sh2、 提示scala install success表示安装成功。3.3 验证执行 4 参考信息https://www.huaweicloud.com/kunpeng/software.html
-
1、简介 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。 类别:编程语言2、基础环境类别子项版本获取地址(方法)华为云虚拟机RC3(916)--OSCentOS7.5 Kernel4.14 软件包Scala2.11.8https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz3、依赖安装无4、组件编译安装无5、系统配置 下载scala2.11.8,下载之前进入当前用户路径wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz解压scala-2.11.8.tgztar -xzvf scala-2.11.8.tgz把scala-2.11.8文件夹拷贝到/usr/local/scala文件夹下cp -r scala-2.11.8 /usr/local/scala当/usr/local中没有scala文件夹时,需要创建一个scala包,执行上一步进入根目录,配置环境vim .bash_profile末尾添加如下配置:export SCALA_HOME=/usr/local/scala/scala-2.11.8export PATH=$PATH:$SCALA_HOME/bin输入以下命令使环境变量快速生效source .bash_profile6、测试Test1:查看scala版本scala -version测试结果:Test2:进入scala编译器scala 测试结果:Test3:退出scala编译器,ctrl+d7、参考信息 无8、FAQ无
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名 -
大模型+知识库(RAG):如何使能行业数智化?—华为行业数字化转型实践分享
2024/11/27 周三 19:00-20:00
华为人工智能专家史老师
本次直播,我们特别邀请了华为人工智能专家史老师,将以大模型知识库为切入点,详细揭示大模型与知识库结合的过程,并分享利用大模型+知识库(RAG)使能行业数智化转型的实践经验。
即将直播
热门标签