Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何向pyspark中的行添加值?_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 如何向pyspark中的行添加值?

Python 如何向pyspark中的行添加值?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个如下所示的数据帧: preds.take(1) [Row(_1=0, _2=Row(val1=False, val2=1, val3='high_school'))] preds.take(1) [Row(ID=0, val1=False, val2=1, val3='high_school')] 我希望整个事情是一行,没有嵌套的行在那里。因此,第一个值将获得一个名称,并且是单行对象的一部分。如果我想将其命名为“ID”,它将如下所示: preds.take(1) [Row(_1=0,

我有一个如下所示的数据帧:

preds.take(1)
[Row(_1=0, _2=Row(val1=False, val2=1, val3='high_school'))]
preds.take(1)
[Row(ID=0, val1=False, val2=1, val3='high_school')]
我希望整个事情是一行,没有嵌套的行在那里。因此,第一个值将获得一个名称,并且是单行对象的一部分。如果我想将其命名为“ID”,它将如下所示:

preds.take(1)
[Row(_1=0, _2=Row(val1=False, val2=1, val3='high_school'))]
preds.take(1)
[Row(ID=0, val1=False, val2=1, val3='high_school')]
我在地图中尝试了各种方法,但没有任何方法产生我想要的结果(或出现错误)。我试过:

preds.map(lambda point: (point._1, point._2))
preds.map(lambda point: point._2.append(point._1))
preds.map(lambda point: point._2['ID']=point._1)
preds.map(lambda point: (point._2).ID=point._1)

由于
是一个
元组
元组
是不可变的,因此只能创建一个新对象。使用纯元组:

from pyspark.sql import Row

r = Row(_1=0, _2=Row(val1=False, val2=1, val3='high_school'))
r[:1] + r[1]
## (0, False, 1, 'high_school')
或保留
\uuuu字段\uuuuu

Row(*r.__fields__[:1] + r[1].__fields__)(*r[:1] + r[1])
## Row(_1=0, val1=False, val2=1, val3='high_school') 
实际上,应避免直接在行上操作,而使用
DataFrame
DSL,而无需将数据提取到Python解释器:

df = sc.parallelize([r]).toDF()

df.select("_1", "_2.val1", "_2.val2", "_2.val3")

最后一个选项对我来说最有意义。我没有意识到我应该避免对行本身进行操作,但这是有道理的。非常感谢。