addFile函数addJar函数

我们在使用Spark的时候有时候需要将一些数据分发到计算节点中。一种方法是将这些文件上传到HDFS上,然后计算节点从HDFS上获取这些数据。当然我们也可以使用addFile函数来分发这些文件。

addFile方法可以接收本地文件(或者HDFS上的文件),甚至是文件夹(如果是文件夹,必须是HDFS路径),然后Spark的Driver和Exector可以通过SparkFiles.get()方法来获取文件的绝对路径(Get the absolute path of a file added through SparkContext.addFile()),addFile的函数原型如下:

def addFile(path: String): Unit
def addFile(path: String, recursive: Boolean): Unit

addFile把添加的本地文件传送给所有的Worker,这样能够保证在每个Worker上正确访问到文件。另外,Worker会把文件放在临时目录下。因此,比较适合用于文件比较小,计算比较复杂的场景。如果文件比较大,网络传送的消耗时间也会增长。

path:可以是local、hdfs(任何hadoop支持的文件系统)、HTTP、HTTPS、FTP等。local方式时,在windows下使用绝对路径时需要加个“/”,如“d:/iteblog.data”得写成“/d:/iteblog.data”或“file:///d:/iteblog.data”。

recursive:如果path是一个目录,那么我们可以设置recursive为true,这样Spark会递归地分发这个路径下面的所有文件到计算节点的临时目录。

通过SparkFiles.get(path:String)获取添加的文件路径。

// driver分发
var path = "/user/iteblog/ip.txt"
sc.addFile(path)
val rdd = sc.textFile(SparkFiles.get(path))
// Exector获取到分发的文件
var path = "/user/iteblog/ip.txt"
sc.addFile(path)
val rdd = sc.parallelize((0 to 10))
rdd.foreach{ index =>
    val path = SparkFiles.get(path)
    ......
}

addJar函数

addJar添加在这个SparkContext实例运行的作业所依赖的jar。,其函数原型如下:

def addJar(path: String)
  path:可以是本地文件(local file)、HDFS文件(其他所有的Hadoop支持的文件系统也可以)、HTTP、 HTTPS 或者是FTP URI文件等等。

其实Spark内部通过spark.jars参数以及spark.yarn.dist.jars函数传进去的Jar都是通过这个函数分发到Task的。

参考:https://www.iteblog.com/archives/1704.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Hive中,可以通过自定义函数来满足特定需求。下面是一个演示如何在Hive中自定义函数的例子: 1. 首先,创建一个Java类来实现自定义函数的逻辑。例如,创建一个名为`MaxValueUDF`的类,该类用于计算给定列的最大值。 ```java package com.hive; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class MaxValueUDF extends UDF { public Text evaluate(Text input) { // 将输入字符串转换为数组 String[] values = input.toString().split(","); // 初始化最大值为第一个元素 int max = Integer.parseInt(values[0]); // 遍历数组,找到最大值 for (int i = 1; i < values.length; i++) { int currentValue = Integer.parseInt(values[i]); if (currentValue > max) { max = currentValue; } } // 返回最大值 return new Text(String.valueOf(max)); } } ``` 2. 编译Java类并将其打包成JAR文件。 3. 在Hive中创建一个临时函数,将JAR文件添加到Hive的classpath中,并指定自定义函数的名称和类。 ```shell ADD JAR /path/to/your/jarfile.jar; CREATE TEMPORARY FUNCTION get_max AS 'com.hive.MaxValueUDF'; ``` 4. 使用自定义函数来计算最大值。例如,假设有一个名为`numbers`的表,其中包含一个名为`value`的列,我们可以使用自定义函数来计算该列的最大值。 ```shell SELECT get_max(value) FROM numbers; ``` 以上是在Hive中自定义函数的一个示例。你可以根据自己的需求编写不同的自定义函数来扩展Hive的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值