专业的JAVA编程教程与资源

网站首页 > java教程 正文

pyspark中调用 java中的FileSystem

temp10 2024-09-22 10:09:32 java教程 9 ℃ 0 评论

昨天,收到一个需求,应该大晚上8点左右吧,突然被上级告知,你现在停下一个手头的工作,我这边有一个紧急的需求。

我什么也没有说,不管自己再忙什么,先听他讲什么,最后的操作,大致是 数据清洗,不知道这有什么紧急的,上级说紧急可能就是紧急吧。

pyspark中调用 java中的FileSystem

流程上:

读取hdfs上的目录,然后做数据清洗,写入一张hive表中,当然中间是没什么问题。

就是需要一些注意点:

例如 读取 /user/hive/warehouse/20210203 下面,有

xxx1_payment_20210203,

xxx2_payment_20210203

xxx3_payment_20210203

xxx4_payment_20210203

xxxx,

zzzz

各种文件,需要读取的文件是 xxxx_payment_20210203这样的文件,那显然需要在文件读取的时候进行过滤。

这个时候需要调用 Hadoop的 FileSystem了,需要通过_gateway获取了,倒不是有多么难,就是记录下 python中调用 Java中的类。


payment_read_path=[]
Path=sc._gateway.jvm.org.apache.hadoop.fs.Path
URI =sc._gateway.jvm.java.net.URI
fs  =sc._gateway.jvm.org.apache.hadoop.fs.FileSystem.get(sc._jsc.hadoopConfiguration())

payment_paths=fs.listStatus(Path(" /user/hive/warehouse/20210203"))

for t in payment_paths:
    pp=t.getPath().getName().split('_')
    if pp[0] 。。。。 and pp[1]=='payment' and pp[2]=='20210203':
        payment_read_path.append(t.getPath().toString())
这样就获取了读取的文件路径,
然后
spark.read.....就可以了
    

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表