Python 使用Pyspark命名变量

Python 使用Pyspark命名变量,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,尽管我的问题很简单,因为我是一个新的火花有问题解决它 我的问题的常规python查询如下: for line in file('schedule.txt'): origin,dest,depart,arrive,price=line.split(',') 我可以把文件读作 sched=sc.textFile('/PATH/schedule.txt') 但当我尝试以下代码时: origin,dest,depart,arrive,price=sched.split(',') 我得到了这

尽管我的问题很简单,因为我是一个新的火花有问题解决它

我的问题的常规python查询如下:

for line in file('schedule.txt'):
  origin,dest,depart,arrive,price=line.split(',')
我可以把文件读作

sched=sc.textFile('/PATH/schedule.txt')
但当我尝试以下代码时:

  origin,dest,depart,arrive,price=sched.split(',')
我得到了这个错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-46-ba0e8c07ca89> in <module>()
----> 1 origin,dest,depart,arrive,price=sched.split(',')

AttributeError: 'RDD' object has no attribute 'split'
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
---->1始发地、目的地、出发地、到达地,价格=计划分割(',')
AttributeError:“RDD”对象没有属性“split”
我可以使用lambda函数分割文件。但我不知道如何创建这5个变量名

如果有人可以帮助我。

sched=sc.textFile('/PATH/schedule.txt')
返回一个
RDD
,它是一个与python文件对象不同的数据类型,并且支持不同的数据类型。python代码的等价物如下所示:

sched=sc.textFile('/PATH/schedule.txt')
# extract values
vals = sched.map(lambda line:line.split(','))
# now you can do some processing, for example sum price
price = vals.reduce(lambda v1,v2:v1[4]+v2[4])
# or just collect the raw values
raw_vals = vals.collect()
更新: 如果希望能够将每行的值作为局部变量访问,可以定义一个专用函数,而不仅仅是lambda,并将其传递给
.map()

更新2:

您希望对文件执行的特定处理并非微不足道,因为它需要写入共享变量(
flights
)。相反,我建议通过
orig,dest
对行进行分组,然后收集结果并插入dict:

flights_data = sched.map(lambda line: ((line[0],line[1]),tuple(line[2:]))).groupByKey().collect()
flights = {f:ds for f,ds in flights_data}

谢谢你的回答。但我的问题不是分割数据集。我的问题是将数据集拆分为5个变量,并将数据分配到5个单独的变量中。接下来的几个代码如下:flights={}flights.setdefault((origin,dest),[])flights[(origin,dest)].append((depart,arrival,int(price)))。为此,我需要单独的变量来调用。所以问题是如何分离。非常感谢你的帮助!你的两个代码都运行得很好。但我仍然需要弄清楚如何在处理过程中使用局部变量(除了您显示的那个)。再次感谢@您可以阅读共享变量的sparks选项。然而,我认为他们不适用于你的情况。为了保持可分发性,sparks共享变量的功能非常有限。谢谢你,尤里布!我会调查的。
flights_data = sched.map(lambda line: ((line[0],line[1]),tuple(line[2:]))).groupByKey().collect()
flights = {f:ds for f,ds in flights_data}