Python 将pyspark列连接到pyspark数据帧中

Python 将pyspark列连接到pyspark数据帧中,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在使用python,目前有两个类的实例pyspark.sql.column.column,我希望将它们连接起来,这样我就可以得到一个包含上述列的pyspark.sql.dataframe.dataframe对象。让我用下面的玩具例子来说明这一点 玩具示例 1) 让我们首先创建一个示例pyspark数据框架,以便能够获得两个示例列 from pyspark.sql import SQLContext # Create a DataFrame df = sqlContext.createData

我正在使用python,目前有两个类的实例
pyspark.sql.column.column
,我希望将它们连接起来,这样我就可以得到一个包含上述列的
pyspark.sql.dataframe.dataframe
对象。让我用下面的玩具例子来说明这一点

玩具示例

1) 让我们首先创建一个示例pyspark数据框架,以便能够获得两个示例列

from pyspark.sql import SQLContext
# Create a DataFrame
df = sqlContext.createDataFrame([("Jordi", 14, 45), ("Elisabeth", 22, 63), ("Aina", 8, 35)], ("name", "age", "weight"))
# Get two columns
col1 = df.name
col2 = df.age
2) 现在,我的目标是能够将变量
col1
col2
组合到一个数据帧中,这样这个新的数据帧包含两列:

|   name    |   age  |
|-----------+--------|
| Jordi     |   14   |
| Elisabeth |   22   |
| Aina      |   8    |

我不确定是否从用于表达式的spark列创建数据帧。您可以为此使用select语句:

df.select('name', 'age')
如果您有2个数据帧,并且无法通过公共列连接它们:

from pyspark.sql import Row

df_temp1 = df1 \
             .select(col1) \
             .rdd \
             .zipWithIndex() # (row, id) \
             .map(lambda row: Row(id=row[1], **row[0].asDict())) \
             .toDf()

df_temp2 = df2 \
             .select(col2) \
             .rdd \
             .zipWithIndex() # (row, id) \
             .map(lambda row: Row(id=row[1], **row[0].asDict())) \
             .toDf()
 df = df2_temp.join(df1_temp, 'id')

你说的合并是什么意思?你想联合还是加入他们?预期的数据帧和输入数据帧应该澄清您的意图。通过合并,我的意思是创建一个包含两列的数据框。您可能正在寻找联接,但需要联接的条件。你能用样本来澄清一下吗?我有两列,都是相同长度的(比如n)。我想创建一个包含n行和2列的数据框架。我已经用一个新创建的数据框架的示例更新了注释。我明白了,我明白了。我认为它更简单,但我想spark的分布式特性使它更复杂一些。因此,我不知道如何定义这样的条件。我正试图找到一个通用的解决方案,解决您有两列并希望从中创建数据帧的情况。所以实际上不应该使用变量
df
。假设这些列来自两个不同的数据帧……无法将两个数据帧与列组合。但您可以向列添加索引,然后将它们连接起来。