在url到dataframe的pyspark csv,无需写入磁盘

时间:2017-12-16 11:20:13

标签: csv apache-spark pyspark

如何在不将其写入磁盘的情况下将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()

1 个答案:

答案 0 :(得分:2)

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))