csv - pyspark csv位于数据帧的url,而不写入磁盘

标签 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()

最佳答案

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/

相关文章:

python - 在 pyspark 中将数据框保存到本地驱动器上的 JSON 文件

python - 如何 : Delete Rows and Columns Selectively in a CSV file from Python

hadoop - Spark-Sql 不修复 hive 表返回 0 条记录

python - 什么样的对象可以作为 Spark RDD 中的元素?

scala - 什么会导致阶段在 Spark 中重新尝试

python - 如何修复此错误 : "SQLContext object has no no attribute ' jsonFile'

apache-spark - 如何获取数组列表中每个元素的最常见值(pyspark)

csv - 如何将 d3.csv.parse 的结果保存到全局变量?

ruby-on-rails - Rails 3,导入前检查 CSV 文件编码

regex - PowerShell中的正则表达式仅匹配该行的第一个匹配项