【问题标题】:"unbound method textFile() must be called with SparkContext instance as first argument (got str instance instead)"“必须使用 SparkContext 实例作为第一个参数调用未绑定的方法 textFile()(改为获取 str 实例)”
【发布时间】:2023-04-06 20:21:01
【问题描述】:

我正在尝试使用 sc.textFile() 函数来读取 csv 文件。但是,我收到“必须使用 SparkContext 实例作为第一个参数调用未绑定的方法 textFile()(获取 str 实例)”错误。我在stackoverflow中检查了可能的答案,但找不到任何答案。请帮忙

我在 iPython Notebook 中使用以下脚本

import os.path

from pyspark import SparkContext


import csv


basedir = os.path.join('data') 

inputpath = os.path.join('train_set.csv') 

filename = os.path.join(basedir,inputpath)

numpart = 2

sc = SparkContext

train_data = sc.textFile(filename,numpart)

澄清一下,basedir ('data') 是 csv 文件所在的文件夹。请帮忙

【问题讨论】:

  • 您将其称为类方法,但它实际上是一个实例方法。实例化 SparkContext 然后调用它。将sc = SparkContext 更改为sc = SparkContext()
  • 谢谢。我按照您的建议进行了尝试,得到了一个不同的错误 "cannot run multiple sparkcontexts; existing sparkcontext(app=pysparkshell, master=local[*])" 。所以我删除了 SparkContext 定义( sc = SparkContext )并开始工作。感谢您的帮助

标签: python apache-spark pyspark


【解决方案1】:

首先,感谢您的问题,我使用答案找到了解决同类问题的方法。我想回答您 2015 年 8 月 11 日的评论。

您可能会查看笔记本后面的命令外壳中发生的情况以获得解释。

当你第一次打电话时:

sc=SparkContext() 

您将看到 Spark 正在初始化,就像您刚刚从命令 shell 启动 Spark 时一样。 所以你初始化sc(默认在Spark启动时)

如果您再次调用它,您的评论中就会出现您所说的错误。因此,我会说您在第一次尝试建议时已经初始化了 Spark 上下文 sc(或者您可能运行了两次建议)。

删除SparkContext 定义时它起作用的原因是因为sc 已定义,但下次启动IPython 笔记本时,我认为您将不得不运行sc = SparkContext() 一次。

为了更清楚,我想说的是,从IPython Notebook 的角度来看,代码将组织如下:

每次重新启动内核时运行一次的单元以自定义您的Python 环境并初始化您的Spark 环境:

import os.path
import csv
from pyspark import SparkContext
sc = SparkContext()

您为测试目的多次运行的第二个单元:

basedir = os.path.join('data') 
inputpath = os.path.join('train_set.csv') 
filename = os.path.join(basedir,inputpath)
numpart = 2
train_data = sc.textFile(filename,numpart)

但如果您想要一个单元格,您也可以在代码末尾的SparkContext 对象上调用stop() 方法:

#your initialization
import os.path
import csv
from pyspark import SparkContext
sc = SparkContext()
#your job
basedir = os.path.join('data') 
inputpath = os.path.join('train_set.csv') 
filename = os.path.join(basedir,inputpath)
numpart = 2
train_data = sc.textFile(filename,numpart)
#closing the SparkContext
sc.stop()

我真的建议由 Holden Karau、Andy Konwinski、Patrick Wendell 和 Matei Zaharia 撰写的 O'Reilly 书籍Learning Spark Lightning-fast data analysis。特别是第 2 章中关于理解 Core Spark 概念 的这类问题。

也许您现在知道这一点,如果知道,请道歉,但它可能对其他人有帮助!

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多