【问题标题】:scala/spark different case class based on input datascala/spark 基于输入数据的不同案例类
【发布时间】:2018-03-04 13:26:02
【问题描述】:

在spark/scala中,如何对案例类进行数据驱动的实例化?

说明: 假设我们有某种合同(例如电信订阅)的输入数据集,并且需要以某种方式评估这些合同。输入数据集包含创建日期、合同有效期开始、有效期结束、一些金额、附加选项、家庭折扣等值,所有这些都不必填写(例如,某些合同没有附加选项)

使用案例类对所有类型的合同进行建模是否有意义?因此,来自数据集的一个输入行可能是固定电话、手机号码或其他服务的合同。然后我会尝试扣除输入行的最详细信息并使用匹配实例化适当的案例类?这些案例类中的每一个都有一个函数,该函数基于此数据和一些来自其他地方的静态数据(查找表,可能是 k,v 映射)返回合同值。然后,此函数将用于调用数据集“地图”。更好的方法?

鉴于案例类的想法很有意义,每个类也可以对相同的输入数据进行模拟。例如。如果客户降低他的互联网速度怎么办,那么这个合同的估计收入是多少?因此,对于一个输入行,我必须返回 2 个新列:合同价值和合同模拟价值。做“假设”场景,也可能是对于一个输入行,我做了几个场景(一次?),而不是返回几行(例如 1. 如果客户购买更多东西怎么办;2. 如果客户降级怎么办; 3. 如果客户取消合同上的所有附加选项怎么办)。

这甚至是解决问题的正确方法吗?如何使这些评估“数据驱动”,因为输入值驱动它是哪个案例类别,而配置/运行选项驱动数据集上的“地图”应该被触发多少次?

【问题讨论】:

  • 虽然我觉得这个问题很有趣,而且在我看来你的方法也可行,但如果你能给出一些非常具体的行示例,一些可能的合同类型的例子,那就太好了可以从这些行创建,以及您希望看到的具体结果。我认为您的问题应该会导致一个非常有趣的解决方案,但是如果您花更多时间在一个小玩具示例上进行试验,那就太好了。
  • 这样的事情有意义吗?有点匆忙,但必须想出更好的例子。也许我将不得不将行业示例从电信更改为其他内容。 docs.google.com/spreadsheets/d/…

标签: scala apache-spark


【解决方案1】:

将大量不同的产品组合建模成类层次结构树并不实用。

有效的解决方案是嵌套类。

因此,从一个输入行中,列将被分组为有意义的不同对象,这些对象将是父类的数据成员。

我已经在银行合同而不是电信合同(如问题中使用的那样)上尝试过此操作:如果有一份贷款合同在数据框中的一行中交付,则该行的列可以分组为成熟度信息、兴趣信息等。这些信息组中的每一个都有自己的类和方法。这些类的实例成为父 Loan 类的数据成员。

这样我可以对不同的兴趣行为、成熟度行为等进行建模,然后在 .map 中从 Loan 对象本身调用它。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多