我是Scala和Spark的新手。我想通过计算编辑距离从数据帧的现有列中导出一个新列。例如,FNAME和LNAME是数据帧的两列,希望添加名为NAMESCORE的新列,以保持FNAME到LNAME的编辑距离。请用工作代码或伪代码提供建议。
这是我得到部分答案的链接。
从Spark数据帧中的单个列派生多个列
您可以使用列文施泰因函数来计算编辑距离。
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"))
您可以使用自定义项:
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方法有关。有人知道我做错了什么吗?
问题内容: 我有一个像这样的简单数据框: 我需要按日期进行调整: 一切正常。但是现在我需要对其进行透视,并获得一个非数字列: 当然,我会得到一个例外: 我想产生一些东西 有可能吗? 问题答案: 假设组合是唯一的,并且您的唯一目标是枢纽而不是合计,则可以使用(或任何其他不限于数值的函数): 如果这些假设不正确,则必须预先汇总数据。例如,对于最常见的值: