用Pyspark读取SFTP上的大型Parquet文件是缓慢的

2022-10-15 13:32:29标签pythonpysparksftpparquet
提问

我从一个带有SQLContext的SFTP服务器上阅读数据(parquet)。 Parquet文件相当大(600万行)。 我找到了一些解决方法,但它花了将近1个小时。 下面是脚本,但太慢。 当数据不在一些sftp服务器时,我使用下面的代码,这些代码通常在大文件中很有效。那么,我如何使用SparkSQL在SFTP中读取远程文件呢? 我尝试过的事情:使用SFTP库打开,但似乎摆脱了SparkSQL的所有优势。 我还尝试使用spark-sftp库来跟踪这篇文章,没有成功:https://www。jitsejan。com/sftp - spark fsspec在引擎盖下使用了Paramiko。这是与Paramiko的已知问题: 阅读文件使用Python Paramiko SFTPClient打开。打开方法很慢 在fsspec中,似乎不可能更改缓冲区大小。 但您可以从sftpsystem派生您自己的实现: 通过在pyarrow中添加buffer_size参数。parquet图书馆的计算时间从51到21分钟: 感谢你的帮助;

import pyarrow as pa  
import pyarrow.parquet as pq 
from fsspec.implementations.sftp import SFTPFileSystem
fs = SFTPFileSystem(host = SERVER_SFTP, port = SERVER_PORT, username = USER, password = PWD)
df = pq.read_table(SERVER_LOCATION\FILE.parquet, filesystem = fs)

df = sqlContext.read.parquet('PATH/file')

df = sqlContext.read.parquet(sftp.open('PATH/file'))

回答

def BufferedSFTPFileSystem(SFTPFileSystem):
    def open(self, path, mode='rb'):
        return super().open(self, path, mode, bufsize=32768)
回答

df = pq.read_table(SERVER_LOCATION\FILE.parquet, filesystem = fs, buffer_size = 32768)

▼版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说cuoshuo.com——程序员的报错记录

部分内容根据CC版权协议转载,如果您希望取消转载请发送邮件到cuoshuo8@163.com

辽ICP备19011660号-5