【发布时间】:2020-03-12 16:47:16
【问题描述】:
我有一个包含字符串列的 DataFrame。我想找到类似的字符串并用一些标志标记它们。我正在使用来自 python-Levenshtein 模块的函数 ratio 并希望将比率大于 0.90 的字符串标记为“相似”。以下是我拥有的 DataFrame 的示例:
sentenceDataFrame = spark.createDataFrame([
(0, "Hi I heard about Spark"),
(1, "I wish Java could use case classes"),
(2, "Logistic,regression,models,are,neat"),
(3, "Logistic,regression,model,are,neat")
], ["id", "sentence"])
想要的输出是:
+---+-----------------------------------+------------+
|id |sentence |similar_flag|
+---+-----------------------------------+------------+
|0 |Hi I heard about Spark | |
|1 |I wish Java could use case classes | |
|2 |Logistic regression models are neat|2_0 |
|3 |Logistic regression model is neat |2_1 |
|4 |Logistics regression model are neat|2_2 |
+---+-----------------------------------+------------+
其中“2_1”表示“2”是参考字符串的“id”(用于匹配的第一个唯一字符串),“1”表示与其匹配的第一个字符串。我想完全避免 for 循环。对于较小的数据,我使用 for-loop 在简单的 python 中实现了预期的结果,并希望在 PySpark 中也有相同的结果,因此我不想使用除 python-Levenshtein 之外的任何模块。我遇到过this 方法,但它要求我放弃 python-Levenshtein 模块。此外,我的 DataFrame 可能很大(并且预计每天都会增长),因此这种方法可能会导致内存错误。有没有更好的方法来达到预期的效果?
【问题讨论】:
标签: python-3.x pyspark apache-spark-sql pyspark-dataframes