如何将 url 处的 csv 读入 Pyspark 中的数据帧而不将其写入磁盘?
我尝试了以下方法,但没有成功:
import urllib.request
from io import StringIO
url = "https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv"
response = urllib.request.urlopen(url)
data = response.read()
text = data.decode('utf-8')
f = StringIO(text)
df1 = sqlContext.read.csv(f, header = True, schema=customSchema)
df1.show()
最佳答案
TL;DR 这是不可能的,通常通过驱动程序传输数据是一个死胡同。
- 在 Spark 2.3 之前,
csv
阅读器只能从 URI 读取(并且不支持 http)。 在 Spark 2.3 中,您使用
RDD
:spark.read.csv(sc.parallelize(text.splitlines()))
但数据将写入磁盘。
您可以从 Pandas 中
createDataFrame
:spark.createDataFrame(pd.read_csv(url)))
但这再次写入磁盘
如果文件很小,我就使用 sparkFiles
:
from pyspark import SparkFiles
spark.sparkContext.addFile(url)
spark.read.csv(SparkFiles.get("iris.csv"), header=True))
关于csv - pyspark csv位于数据帧的url,而不写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47845091/