Python 使用Pyspark命名变量
尽管我的问题很简单,因为我是一个新的火花有问题解决它 我的问题的常规python查询如下: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(',') 我得到了这
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}