当前位置:首页 » 编程软件 » sparkscala脚本

sparkscala脚本

发布时间: 2022-06-01 16:53:16

① Spark 中用 Scala 和 java 开发有什么区别

1,构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程
2,对于spark中的API来说,Java和Scala有差别,但差别并不大
3,如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询
4,用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高
建议:使用Scala构建spark作业,因为spark本身为sbt所构建,同时使用Scala开发spark作业将有助于理解spark的实现机制
Scala相对Java语法更丰富,更简洁,写起来更像脚本,能够提高开发效率。
使用Java的话代码会规范些,不过太臃肿,代码量更大。
另外Spark基本使用函数式编程,使用Java的话可能需要写一大堆匿名类,而Scala只需要一个lambda表达式。
Java不支持自动类型推导,RDD类基本都是范型,声明时需要写一串类类型,而Scala基本可以省略变量类型。
另外,如果喜欢,可以混合Java和Scala,因为二者最终都是编译成class文件,使用Scala能够随意调用Java实现的类和方法。
从表面上看,无论采用哪种语言,都能完成一样的功能,只是代码量有多有少,开发人员根据自己的情况选择使用Java还是Scala都可。
据说目前最新的Java 8已经支持函数式接口了,Java 9也将推出Java Shell功能,慢慢地会变得和Scala一样简洁。

② 为什么Spark要用Scala实现

1,构建系统的选择,sbt更合适用来构建Scala工程,maven更合适用来构建Java工程
2,对于spark中的API来说,Java和Scala有差别,但差别并不大
3,如果用Scala开发spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式实时查询
4,用Scala代码量将减少甚至一个数量级,不过Scala的使用门槛较高
建议:使用Scala构建spark作业,因为spark本身为sbt所构建,同时使用Scala开发spark作业将有助于理解spark的实现机制

作者:egraldlo
链接:

③ spark部署python脚本怎么部署三方库

1、Spark脚本提交/运行/部署
1.1 spark-shell(交互窗口模式)
运行Spark-shell需要指向申请资源的standalone spark集群信息,其参数为MASTER,还可以指定executor及driver的内存大小。
sudo spark-shell --executor-memory 5g --driver-memory1g --master spark://192.168.180.216:7077
spark-shell启动完后,可以在交互窗口中输入Scala命令,进行操作,其中spark-shell已经默认生成sc对象,可以用:
val user_rdd1 = sc.textFile(inputpath, 10)
读取数据资源等。
1.2 spark-shell(脚本运行模式)
上面方法需要在交互窗口中一条一条的输入scala程序;将scala程序保存在test.scala文件中,可以通过以下命令一次运行该文件中的程序代码:
sudo spark-shell --executor-memory 5g --driver-memory1g --master spark//192.168.180.216:7077 < test.scala
运行后会自动进入spark-shell交互窗口并且运行test.scala中的程序,运行完成后,会自动退出spark-shell。
如果程序退出终端后,Linux终端失效,可以试试:stty echo 命令
1.3 spark-submit (程序部署)
Spark提供了一个容易上手的应用程序部署工具bin/spark-submit,可以完成Spark应用程序在local、Standalone、YARN、Mesos上的快捷部署。可以指定集群资源master,executor/ driver的内存资源等。
sudo spark-submit --masterspark://192.168.180.216:7077 --executor-memory 5g --class mypackage.test workcount.jar hdfs://192.168.180.79:9000/user/input.txt
workcount .scala 代码打包workcount.jar,并将文件需要上传到spark的安装目录下面;
hdfs//192.168.180.79:9000/user/input.txt为输入参数;

④ 如何运行含spark的python脚本

1、Spark脚本提交/运行/部署1.1spark-shell(交互窗口模式)运行Spark-shell需要指向申请资源的standalonespark集群信息,其参数为MASTER,还可以指定executor及driver的内存大小。sudospark-shell--executor-memory5g--driver-memory1g--masterspark://192.168.180.216:7077spark-shell启动完后,可以在交互窗口中输入Scala命令,进行操作,其中spark-shell已经默认生成sc对象,可以用:valuser_rdd1=sc.textFile(inputpath,10)读取数据资源等。1.2spark-shell(脚本运行模式)上面方法需要在交互窗口中一条一条的输入scala程序;将scala程序保存在test.scala文件中,可以通过以下命令一次运行该文件中的程序代码:sudospark-shell--executor-memory5g--driver-memory1g--masterspark//192.168.180.216:7077

⑤ 如何使用scala+spark读写hbase

公司有一些实时数据处理的项目,存储用的是hbase,提供实时的检索,当然hbase里面存储的数据模型都是简单的,复杂的多维检索的结果是在es里面存储的,公司也正在引入Kylin作为OLAP的数据分析引擎,这块后续有空在研究下。
接着上面说的,hbase存储着一些实时的数据,前两周新需求需要对hbase里面指定表的数据做一次全量的update以满足业务的发展,平时操作hbase都是单条的curd,或者插入一个批量的list,用的都是hbase的java api比较简单,但这次涉及全量update,所以如果再用原来那种单线程的操作api,势必速度回慢上许多。
关于批量操作Hbase,一般我们都会用MapRece来操作,这样可以大大加快处理效率,原来也写过MR操作Hbase,过程比较繁琐,最近一直在用scala做spark的相关开发,所以就直接使用scala+spark来搞定这件事了,当然底层用的还是Hbase的TableOutputFormat和TableOutputFormat这个和MR是一样的,在spark里面把从hbase里面读取的数据集转成rdd了,然后做一些简单的过滤,转化,最终在把结果写入到hbase里面。
整个流程如下:
(1)全量读取hbase表的数据
(2)做一系列的ETL
(3)把全量数据再写回hbase
核心代码如下:
//获取conf
val conf=HBaseConfiguration.create() //设置读取的表
conf.set(TableInputFormat.INPUT_TABLE,tableName) //设置写入的表
conf.set(TableOutputFormat.OUTPUT_TABLE,tableName)//创建sparkConf
val sparkConf=new SparkConf() //设置spark的任务名
sparkConf.setAppName("read and write for hbase ") //创建spark上下文
val sc=new SparkContext(sparkConf)
//为job指定输出格式和输出表名

val newAPIJobConfiguration1 = Job.getInstance(conf)
newAPIJobConfiguration1.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, tableName)
newAPIJobConfiguration1.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])

//全量读取hbase表
val rdd=sc.newAPIHadoopRDD(conf,classOf[TableInputFormat]
,classOf[ImmutableBytesWritable]
,classOf[Result]
)
//过滤空数据,然后对每一个记录做更新,并转换成写入的格式
val final_rdd= rdd.filter(checkNotEmptyKs).map(forDatas)
//转换后的结果,再次做过滤
val save_rdd=final_rdd.filter(checkNull)
//最终在写回hbase表
save_rdd.saveAsNewAPIHadoopDataset(newAPIJobConfiguration1.getConfiguration)
sc.stop()

从上面的代码可以看出来,使用spark+scala操作hbase是非常简单的。下面我们看一下,中间用到的几个自定义函数:
第一个:checkNotEmptyKs
作用:过滤掉空列簇的数据
def checkNotEmptyKs(f:((ImmutableBytesWritable,Result))):Boolean={ val r=f._2 val rowkey=Bytes.toString(r.getRow) val map:scala.collection.mutable.Map[Array[Byte],Array[Byte]]= r.getFamilyMap(Bytes.toBytes("ks")).asScala if(map.isEmpty) false else true
}

第二个:forDatas
作用:读取每一条数据,做update后,在转化成写入操作
def forDatas(f: (ImmutableBytesWritable,Result)): (ImmutableBytesWritable,Put)={ val r=f._2 //获取Result
val put:Put=new Put(r.getRow) //声明put
val ks=Bytes.toBytes("ks") //读取指定列簇
val map:scala.collection.mutable.Map[Array[Byte],Array[Byte]]= r.getFamilyMap(ks).asScala
map.foreach(kv=>{//遍历每一个rowkey下面的指定列簇的每一列的数据做转化
val kid= Bytes.toString(kv._1)//知识点id
var value=Bytes.toString(kv._2)//知识点的value值
value="修改后的value"
put.addColumn(ks,kv._1,Bytes.toBytes(value)) //放入put对象
}
) if(put.isEmpty) null else (new ImmutableBytesWritable(),put)

}

第三个:checkNull 作用:过滤最终结果里面的null数据
def checkNull(f:((ImmutableBytesWritable,Put))):Boolean={ if(f==null) false else true
}

上面就是整个处理的逻辑了,需要注意的是对hbase里面的无效数据作过滤,跳过无效数据即可,逻辑是比较简单的,代码量也比较少。

⑥ scala代码能够在spark-shell运行,但是不能通过spark-submit提交运行,why

靠 总算搞定了,跟题主一模一样的异常信息

首先肯定是版本问题,编译版本问题。如楼上所说sbt配置spark-core的版本应该有问题。
贴我的配置
<img src="https://pic4.mg.com/_b.png" data-rawwidth="745" data-rawheight="647" class="origin_image zh-lightbox-thumb" width="745" data-original="https://pic4.mg.com/_r.png">注意各个依赖配置区别,%%和%的区别,%%会带scala版本信息,spark-core也就会变成spark-core_2.10,因为这里scala_version是2.10.4(.4就不要了),然后构建打包执行成功,一定要重新project structure。注意各个依赖配置区别,%%和%的区别,%%会带scala版本信息,spark-core也就会变成spark-core_2.10,因为这里scala_version是2.10.4(.4就不要了),然后构建打包执行成功,一定要重新project structure。

之前是scala_version是2.11.7,而且没有带scala版本信息去编译。由于用的CDH,CDH中的依赖也没有spark-core_2.11,只有spark-core_2.10。

⑦ 如何使用Spark/Scala读取Hbase的数据

使用Spark/Scala读取Hbase的数据 必须使用高亮参数启动Spark-shell,否则当你遍历RDD时会出现如下的Exception java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable spark-shell--conf spark.serializer=org.apache.spark.serializer.KryoSerializer 以下代码,经过MaprDB实测通过 import org.apache.spark._ import org.apache.spark.rdd.NewHadoopRDD import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor} import org.apache.hadoop.hbase.client.HBaseAdmin import org.apache.hadoop.hbase.maprece.TableInputFormat import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HColumnDescriptor import org.apache.hadoop.hbase.util.Bytes import org如何使用Spark/Scala读取Hbase的数据

⑧ 怎样在spark单机上编写运行scala程序

使用Scala写一个测试代码:

object Test {
def main(args: Array[String]): Unit = {
println("hello world")
}
}

就把这个Test视为类,项目组织结构如:

⑨ spark怎么运行scala代码

# Use spark-submit to run your application
$ YOUR_SPARK_HOME/bin/spark-submit \
--class "SimpleApp" \
--master local[4] \
target/scala-2.10/simple-project_2.10-1.0.jar
...

⑩ 如何将spark scala脚本运行的数据结果导出

可以前提是其他设置没有改变

热点内容
交通银行怎么登陆不了密码 发布:2024-05-17 13:54:48 浏览:543
安卓如何自动连接无线 发布:2024-05-17 13:53:51 浏览:262
python的urlparse 发布:2024-05-17 13:44:20 浏览:769
linux命令全称 发布:2024-05-17 12:07:54 浏览:110
ftpnas区别 发布:2024-05-17 12:06:18 浏览:949
512g存储芯片价格 发布:2024-05-17 12:04:48 浏览:963
脚本运行周期 发布:2024-05-17 11:39:09 浏览:809
阿里云服务器怎么配置发信功能 发布:2024-05-17 11:37:24 浏览:313
编程中的变量 发布:2024-05-17 11:33:06 浏览:777
加密视频怎么解密 发布:2024-05-17 11:02:52 浏览:572