“路径只能是字符串、列表或 RDD”错误,spark 使用 Paramiko 从 sftp 读取 csv

`path can be only string, list or RDD` error with spark read csv from sftp with Paramiko

我正在处理 SFTP 中托管的 CSV 文件。我可以使用 pd.read_csv() 访问它们,但这不适用于 spark.read.csv()。我想知道为什么。

ssh.connect(host_name, username=username, password=password, pkey=pk)
ftp_client = ssh.open_sftp()

# reading csv
path = 'some_path'
files = ftp_client.listdir('{}'.format(path))
for file in files:
    with ftp_client.open('{}/{}'.format(path, file)) as f:
        # this is not working
        # df = spark.read.csv(f)

        # this is working
        df = pd.read_csv(f)

        
print(df)

当运行这个命令用spark读取CSV方法时我有以下错误path can be only string, list or RDD

出现问题是因为您试图将某个自定义 class 的实例传递给 Spark,而它不知道 class。解决方案是这样的 - 读作 Pandas,并使用 spark.createDataFrame 转换为 Spark DataFrame(未测试,但应该有效):

all_df = None
for file in files:
    with ftp_client.open('{}/{}'.format(path, file)) as f:
        pandas_df = pd.read_csv(f)
        df = spark.createDataFrame(pandas_df)
        if all_df is not None:
          all_df = all_df.union(df)
        else:
          all_df = df