Apache spark Pyspark 2.6如何增加值列

Apache spark Pyspark 2.6如何增加值列,apache-spark,pyspark,Apache Spark,Pyspark,我正在使用Python 2.6附带的cloudera虚拟机进行Pyspark培训。 我已经在RDD中读取了该文件。我需要增加其中一个文件列中的数字 结构文件: student,grade Owen,4 Andres,3.9 Leidy,4 Flor,5 Jhon,4 Paola,3.8 我读取文件的代码已在运行,并显示以下数据: 代码: 正在打印: 现在我需要增加2中的列级别,然后我添加了代码: header = grades_report.first() grades = grades_r

我正在使用Python 2.6附带的cloudera虚拟机进行Pyspark培训。 我已经在RDD中读取了该文件。我需要增加其中一个文件列中的数字

结构文件:

student,grade
Owen,4
Andres,3.9
Leidy,4
Flor,5
Jhon,4
Paola,3.8
我读取文件的代码已在运行,并显示以下数据:

代码:

正在打印:

现在我需要增加2中的列级别,然后我添加了代码:

header = grades_report.first()
grades = grades_report.map(lambda x: x.split(','))
grades_incr = grades.filter(lambda x: x != header).map(lambda x : int(x[1]) + 2)
print(grades_incr.take(2))
这种方法不起作用,因为它没有像我预期的那样映射列,而我得到的错误是:

  File "/home/cloudera/scripts/spark0123.py", line 25, in <lambda>
    grades_incr = grades.filter(lambda x: x != header).map(lambda x : int(x[1]) + 2)
ValueError: invalid literal for int() with base 10: 'grade'
文件“/home/cloudera/scripts/spark0123.py”,第25行,在
grades\u incr=grades.filter(lambda x:x!=标题).map(lambda x:int(x[1])+2)
ValueError:基数为10的int()的文本无效:“grade”
拜托,有人有主意吗?我认为我的过滤器工作不正常。
非常感谢。

您可以这样做:

数据帧方法
grades=spark.read.option('header','true').csv('file.txt'))
打印(grades.collect())
年级=年级。选择(年级['student',年级['grade']+2)
打印(等级增加(2))
RDD方法
grades\u report=sc.textFile('file.txt'))
grades=grades_report.map(lambda x:x.split(','))
header=grades.first()
grades\u incr=grades.filter(lambda x:x!=标题).map(lambda(\u,grade):float(grade)+2)

您可以这样做:

数据帧方法
grades=spark.read.option('header','true').csv('file.txt'))
打印(grades.collect())
年级=年级。选择(年级['student',年级['grade']+2)
打印(等级增加(2))
RDD方法
grades\u report=sc.textFile('file.txt'))
grades=grades_report.map(lambda x:x.split(','))
header=grades.first()
grades\u incr=grades.filter(lambda x:x!=标题).map(lambda(\u,grade):float(grade)+2)

问题在于,在对
进行拆分之前提取标题。您可以将其更改为:

grades = grades_report.map(lambda x: x.split(','))
header = grades .first()
grades_incr = grades.filter(lambda x: x != header).map(lambda x : float(x[1]) + 2)

我相信
int
强制转换应该是一个
float
,因为你有双精度。

问题是你在
上拆分之前提取了标题。您可以将其更改为:

grades = grades_report.map(lambda x: x.split(','))
header = grades .first()
grades_incr = grades.filter(lambda x: x != header).map(lambda x : float(x[1]) + 2)

而且我相信
int
cast应该是一个
float
,因为你有双精度。

这个方法听起来不错。如果您应该使用映射和过滤功能,您会怎么做?thanks@AndresAngel我更新了答案:)RDD方法应该是您正在寻找的方法。这种方法听起来不错。如果您应该使用映射和过滤功能,您会怎么做?thanks@AndresAngel我更新了答案:)RDD方法应该是您想要的