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

用包含字符串的列表替换字符串

曹昊焱
2023-03-14

两行的一个例子是:([a,b,c],d)和([d,e],a)我想把这些行转换成([a,b,c],[d,e])和([d,e],[a,b,c])

dataframe的列名是“src”和“dst”。

我如何处理这个问题?

val result = df.map(f => {
  if(df.exists(x => x._1.contains(f._2))) {
    (f._1, df.filter(x => x._1.contains(f._2)).head._1)
  } else {
    (f._1, List(f._2))
  }
}).toDF("src", "dst")

共有1个答案

强承望
2023-03-14

就我从你上面的问题和评论中了解到的,以下是你的解决方案

将输入dataframe指定为

+---------+---+
|src      |dst|
+---------+---+
|[a, b, c]|d  |
|[d, e]   |a  |
+---------+---+

您可以使用joinUDF函数作为

import org.apache.spark.sql.functions._
val joinExpr = udf((col1: mutable.WrappedArray[String], col2: String) =>  col1.contains(col2))

df.as("t1").join(df.as("t2"), joinExpr($"t1.src", $"t2.dst")).select($"t1.src".as("src"), $"t2.src".as("dst")).show(false)
+---------+---------+
|src      |dst      |
+---------+---------+
|[a, b, c]|[d, e]   |
|[d, e]   |[a, b, c]|
+---------+---------+
 类似资料:
  • 我有一个值为-f.e.:。 我想替换这个字符: ,,,,,,,与那些: <代码>>、<代码>>、<代码>l、<代码>o、<代码>s、<代码>z、<代码>c、<代码>n。 这里我的意思是,如果解析器将找到f.e.:char(在第一个列表中是第二个)应该替换为在第二个列表中处于相同位置/位置的char,在本例中是:。 char应替换为char。 char应替换为char。 在我的例子中,要替换的字符列

  • 问题内容: 有没有更短的方法可以编写以下代码? 注意,我不需要替换那些确切的值。我只是在寻找一种将5条以上的线变成少于5条线的方法 问题答案: 看起来是使用循环的好机会: 如果您不介意括号,则更快的方法是:

  • 问题内容: 我想替换包含特定子字符串的所有字符串。因此,例如,如果我有此数据框: 我可以用字符串“ ball sport”代替足球,如下所示: 我想,虽然是替换包含所有(在这种情况下和)与“球运动”。像这样: 问题答案: 您可以用来掩盖包含“ ball”的行,然后用新值覆盖: 要使其不区分大小写,请通过`case = False:

  • 问题内容: 我正在尝试替换文件列表中的部分文件扩展名。我希望能够遍历项目(文件)并删除扩展名。我不知道当re.sub作为第三个参数需要一个字符串时,如何适当地遍历列表中的项目。例如。re.sub(pattern,repl,string,count = 0,标志= 0) 这里出现的问题是re.sub需要一个字符串,而我希望它在字符串列表中循环。 感谢您的任何建议! 问题答案: 您可以使用列表推导来使

  • 我有这样的桌子: 在该

  • 问题内容: 如何检查字符串中是否包含字符列表,例如“ ABCDEFGH”,如何检查字符串中是否有字符列表。 问题答案: 在Java中使用正则表达式检查在Java中使用 正则表达式 例如: