“路径只能是字符串、列表或 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
我正在处理 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