当前位置: 首页 > 知识库问答 >
问题:

如何将StringType列与pyspark中ArrayType列的每个元素合并

黄流觞
2023-03-14

我在pyspark数据帧中有一个StringType()列和一个ArrayType(StringType())列。我想将StringType()列与ArrayType(StringType())列的每个元素合并
示例:

+-----+---------------------+------------------------------+
|col1 |col2                 |col3                          |
+-----+---------------------+------------------------------+
|'AQQ'|['ABC', 'DEF']       |['AQQABC', 'AQQDEF']          |
|'APP'|['ABC', 'DEF', 'GHI']|['APPABC', 'APPDEF', 'APPGHI']|
+-----+---------------------+------------------------------+

谢谢:)

共有1个答案

叶建柏
2023-03-14

对于spark 2.4,使用变换:

from pyspark.sql.functions import expr 

df = spark.createDataFrame([('AQQ', ['ABC', 'DEF']),('APP', ['ABC', 'DEF', 'GHI'])], ['col1', 'col2'])

df.withColumn('col3', expr("transform(col2, x -> concat(col1, x))")).show(truncate=False)                            
+----+---------------+------------------------+
|col1|col2           |col3                    |
+----+---------------+------------------------+
|AQQ |[ABC, DEF]     |[AQQABC, AQQDEF]        |
|APP |[ABC, DEF, GHI]|[APPABC, APPDEF, APPGHI]|
+----+---------------+------------------------+
 类似资料:
  • 我试图在我的数据集上运行PySpark中的FPGrowth算法。 我得到以下错误: 我的数据帧df格式如下: 如果“名称”列中的数据形式为: 如何在这个形式中从StringType转换为ArrayType 我从我的RDD形成了Dataframe:

  • 我想合并火花中的多个数组类型[字符串类型]列以创建一个数组类型[字符串类型]。为了组合两列,我在这里找到了解决方案: 将Array[string]类型的两个spark sql列合并成一个新的Array[string]列 但是如果我不知道编译时的列数,我该如何进行组合呢?在运行时,我将知道所有要组合的列的名称。 一种选择是使用上面stackoverflow问题中定义的UDF,在循环中多次添加两列。但

  • 我已经生成了<code>pyspark.sql.dataframe。DataFrame带有列名称cast和score。 但是,我想在cast列中保留唯一的名字,而不是与它们相关联的id,与_score列并排。 列中数据类型的结构如下所示 有人可以帮助我如何提取只有演员姓名和分数列的数据。 提前致谢

  • 是否可以将StringType列强制转换为spark dataframe中的ArrayType列? A:数组(nullable=true)

  • 问题内容: 我有一个带有2 ArrayType字段的PySpark DataFrame: 我想将它们合并为一个ArrayType字段: 适用于字符串的语法在这里似乎不起作用: 谢谢! 问题答案: 火花 > = 2.4 您可以使用功能(SPARK-23736): 要保留其中一个值时的数据,可以使用: 火花 <2.4 不幸的是,一般情况下要串联列,您将需要一个UDF,例如: 可以用作:

  • 问题内容: 我只想将一个列表中的每个元素除以一个int。 这是错误: 我了解为什么收到此错误。但是我为找不到解决方案感到沮丧。 还尝试了: 错误: 预期结果: 编辑: 以下代码给了我预期的结果: 但是,有没有更容易/更快的方法来做到这一点? 问题答案: 惯用的方式是使用列表理解: 或者,如果您需要保留对原始列表的引用: