使用pyspark,spark + databricks时如何将完全不相关的列添加到数据框中

Posted

技术标签:

【中文标题】使用pyspark,spark + databricks时如何将完全不相关的列添加到数据框中【英文标题】:How to add a completely irrelevant column to a data frame when using pyspark, spark + databricks 【发布时间】:2019-04-07 01:58:19 【问题描述】:

假设我有一个数据框:

myGraph=spark.createDataFrame([(1.3,2.1,3.0),
                               (2.5,4.6,3.1),
                               (6.5,7.2,10.0)],
                              ['col1','col2','col3'])

我想添加一个新的字符串列,使其看起来像:

from pyspark.sql.functions import lit
myGraph=myGraph.withColumn('rowName',lit('xxx'))

到这里为止,rowName 中的值都是'xxx'。但是我不知道如何在 rowName 中添加新的列值('col1','col2','col3')?

【问题讨论】:

如何为每一行选择rowname中要使用的列? @Suresh 嗨,我只是把列名作为字符串列放在行名列中 好的,那么在每一行中放置哪个列名,所有列名连接或每行应具有基于任何逻辑的特定列名? 第一列名在第一行,第二列名在第二行。在这种情况下 【参考方案1】:

您可以使用内置的 rand() 函数和 udf 辅助函数创建一个随机 int 值 (1-N) 来生成新字符串,如下所示:

val randColumnUDF = udf((rand: Long) => s"X$rand")
val N = 10000

df.withColumn("rand", randColumnUDF(rand() * N)).show(false)

+----+
|rand|
+----+
|X1  |
|X8  |
|X6  |
|... |
+----+

上面的代码会将一个 1 - 10000 之间的随机数附加到 X 产生的值:X1、X23、...等

【讨论】:

以上是关于使用pyspark,spark + databricks时如何将完全不相关的列添加到数据框中的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark:如何在Python 3中使用pyspark

PySpark - 为 SQL Server 使用 Spark 连接器

如何使用 Spark/PySpark 删除雪花目标表

使用 Pyspark 使用 Spark 读取巨大 Json 文件的第一行

如何删除 Spark 表列中的空格(Pyspark)

Spark 2.1 Structured Streaming - 使用 Kakfa 作为 Python 的源 (pyspark)