【问题标题】:Creating a decision tree based on two columns基于两列创建决策树
【发布时间】:2019-01-25 11:12:06
【问题描述】:

我正在使用 Spark 进行一些大型数据处理。但我认为这个问题有点独立。我有以下数据集和其他一些列:

--------------------------------------------------
| Name      | Corrected_Name                     |
--------------------------------------------------
| Pawan     | Varun                              |
--------------------------------------------------
| Varun     | Naresh                             |
--------------------------------------------------
| Dona      | Pia                                |
--------------------------------------------------

现在我正在尝试更正所有名称,因此在这种情况下,我必须找到链 Pawan -> Varun -> Naresh。有没有办法在 Spark 或其他算法中处理这个问题?

【问题讨论】:

  • Pawan->Varun->Naresh 表示现在所有PawanVarun 都将是Naresh?如果是,那么只需找到最深的孩子,并用这个孩子值替换所有父母。

标签: algorithm apache-spark decision-tree


【解决方案1】:

首先,请注意,名称由于频繁重复,通常是错误的标识符。如果您最终不得不“压缩”链(将 2 行转换为 1 行),则按名称减少本身会导致混乱。

关于原始问题,这是应该进行迭代计算的常见情况,这种类型的用例有两个可能的方向:

  1. 在内存中(应该对数据进行假设)- 将所有数据收集到单个机器中,在内存中执行映射并将结果Broadcast 到其他机器。
  2. 分布式映射(对数据不做任何假设,非常昂贵)- 执行分布式下一步查找,可以优化以执行最多 log(n) join-cache-count 操作

(2)的pyspark代码示例:

forward = get_all_data()
current_count = -1
while(current_count != 0):
    forward = forward.selectExpr("Name", "Corrected_Name as original_last_name", "Corrected_Name as connection").join(forward.selectExpr("Corrected_Name as Corrected_Name_Tmp", "Name as connection"), "connection", "left")
    forward_clean = forward.withColumn("Corrected_Name", merge_udf(col("original_last_name"), col("Corrected_Name_Tmp"))).cache()
    current_count = forward_clean.filter(forward_clean.Corrected_Name_Tmp.isNotNull()).count()
    forward = forward_clean.drop(col("original_last_name")).drop(col("Corrected_Name_Tmp")).drop(col("connection"))

此代码生成所有行,每一行都有一个从原始“名称”到“Corrected_Name”链中最后一个元素的映射。

注意:(2) 非常浪费,但没有任何假设,可以通过使查找更加困难来优化它以在 log(n) 处执行,如果您只需要每个链中的第一个元素,则可以优化查找。 (1) 是首选的计算大小,但您必须对内存占用进行基准测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2018-09-05
    • 2014-05-09
    • 2021-05-16
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多