apache-spark - 使用pyspark连接数据帧的多列

标签 apache-spark pyspark apache-spark-sql

假设我有一个列列表,例如:

col_list = ['col1','col2']
df = spark.read.json(path_to_file)
print(df.columns)
# ['col1','col2','col3']

我需要通过连接 col1col2 来创建一个新列。我不想在连接时对列名进行硬编码,但需要从列表中选择它。

我怎样才能做到这一点?

最佳答案

您可以使用 pyspark.sql.functions.concat() concatenate 与您在 list 中指定的列一样多。继续将它们作为参数传递。

from pyspark.sql.functions import concat
# Creating an example DataFrame
values = [('A1',11,'A3','A4'),('B1',22,'B3','B4'),('C1',33,'C3','C4')]
df = sqlContext.createDataFrame(values,['col1','col2','col3','col4'])
df.show()
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
|  A1|  11|  A3|  A4|
|  B1|  22|  B3|  B4|
|  C1|  33|  C3|  C4|
+----+----+----+----+

concat() 函数中,您传递需要连接的所有列 - 就像 concat('col1','col2') 。如果您有列表,则可以使用 un-list 对其进行 * 。所以 (*['col1','col2']) 返回 ('col1','col2')
col_list = ['col1','col2']
df = df.withColumn('concatenated_cols',concat(*col_list))
df.show()
+----+----+----+----+-----------------+
|col1|col2|col3|col4|concatenated_cols|
+----+----+----+----+-----------------+
|  A1|  11|  A3|  A4|             A111|
|  B1|  22|  B3|  B4|             B122|
|  C1|  33|  C3|  C4|             C133|
+----+----+----+----+-----------------+

关于apache-spark - 使用pyspark连接数据帧的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54921359/

相关文章:

rest - 如何通过 REST API 提交作业?

machine-learning - 我可以使用带有稀疏向量的数据帧进行交叉验证调整吗?

apache-spark - 使用 scala 从 Spark 中的数组数组中的结构中提取值

apache-spark - 获取 Spark Dataframe 中特定单元格的值

scala - Spark : UDF executed many times

apache-spark - 如何在 spark 2.4.1 中将 jdbc/partitionColumn 类型设置为 Date

hadoop - 如何从 pyspark 连接到 Teradata?

hadoop - 将Spark应用程序提交到virtualbox Spark Master

apache-spark - Spark (PySpark) 文件已存在异常

docker - 无法连接在Docker中运行的Apache Spark