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

如何通过派生编辑距离数据框列(字符串)向 spark 中的数据框添加新列

鱼恩
2023-03-14

我是Scala和Spark的新手。我想通过计算编辑距离从数据帧的现有列中导出一个新列。例如,FNAME和LNAME是数据帧的两列,希望添加名为NAMESCORE的新列,以保持FNAME到LNAME的编辑距离。请用工作代码或伪代码提供建议。

这是我得到部分答案的链接。

从Spark数据帧中的单个列派生多个列

共有2个答案

丘智志
2023-03-14

您可以使用列文施泰因函数来计算编辑距离。

https://spark.apache.org/docs/1.6.2/api/java/org/apache/spark/sql/functions.html#levenshtein(org.apache.spark.sql.Column和org.apachi.spark.sql.Column)

val sqlContext = new SQLContext(sc)
val df = sqlContext.read
    .format("com.crealytics.spark.excel")
    ...
    .load(...)
df.withColumn("NAME_DISTANCE", levenshtein($"Name_Left", $"Name_Right"))
郜杰
2023-03-14

您可以使用自定义项:

def udfToFindEditDistance(col1 :String,col2 :String): String ={
    //find edit distance b/w col1 and col2 
  }

注册udf

 val newUDF=udf(udfToFindEditDistance(_:String,_:String)) 

添加新列

val newDf=df.withColumn("newColumnName",newUDF(df("FNAME"),df("LNAME")))
 类似资料:
  • 问题内容: 我想像这样向数据框添加列“ D”: 根据以下字典: 因此结果数据框显示为: 到目前为止,我尝试了该方法,但无法弄清楚它如何与Dictionary一起工作。 问题答案: 调用并传递字典,这将执行查找并返回该键的关联值:

  • 问题内容: 我想通过替换子字符串对Spark Dataframe列执行一些基本的处理。最快的方法是什么? 在当前的用例中,我有一个要规范化的地址列表。例如,此数据框: 会成为 问题答案: 对于Spark 1.5或更高版本,可以使用功能包: 快速说明: 调用该函数可在数据框中添加(或替换,如果名称存在)列。 该函数将通过替换所有与模式匹配的子字符串来生成新列。

  • 问题内容: 我试图基于一个的数据创建“ n” 。我正在检查in的Integer值,并循环执行sql语句以创建与列中一样多的“ n” 。 这是我的代码: 我需要创建“ n”,但我不知道如何在循环之前声明类型并在for内填充。 现有数据类型: 新的数据类型: 问题答案: 您可以创建一个可变列表并填充它: 但是更好的方法(不使用可变数据结构)是将整数列表 映射 到DataFrames列表中:

  • 问题内容: 查看新的spark数据框api,尚不清楚是否可以修改数据框列。 我怎么会去改变行的值列一个数据帧的? 在这将是 编辑:合并以下内容,您不能修改现有数据框,因为它是不可变的,但是您可以返回具有所需修改的新数据框。 如果您只想根据条件替换列中的值,例如: 如果要对列执行某些操作并创建一个添加到数据框的新列: 如果希望新列的名称与旧列的名称相同,则可以添加其他步骤: 问题答案: 虽然您不能这

  • 我正在使用Pandas,希望将行添加到已建立列的空数据框中。 到目前为止,我的代码看起来像这样。。。 然而,当我跑步的时候。。。 数据框返回时没有行,只有列。我不确定我做错了什么,但我很确定它与append方法有关。有人知道我做错了什么吗?

  • 问题内容: 我有一个像这样的简单数据框: 我需要按日期进行调整: 一切正常。但是现在我需要对其进行透视,并获得一个非数字列: 当然,我会得到一个例外: 我想产生一些东西 有可能吗? 问题答案: 假设组合是唯一的,并且您的唯一目标是枢纽而不是合计,则可以使用(或任何其他不限于数值的函数): 如果这些假设不正确,则必须预先汇总数据。例如,对于最常见的值: