• Data Frame
    • Spark 的 Data Frame
    • Scikit-Learn 的 Data Frame
    • MLeap 的 Data Frame:Leap Frame
      • Leap Frame 示例
    • TensorFlow

    Data Frame

    Data Freame 用于 ML Pipline 执行期间的数据存储。类似于 SQL Table,它有 Schema,用于存储数据类型,有 Column,用于实际存储每一行的数据。

    Spark、Scikit-Learn 和 MLeap 实现了各自版本的 Data Frame,TensorFlow 则使用了包含输入和输出的 Graph 来执行 Transformer,因此也能够轻松获取到类似 Data Frame 的数据结构

    Spark 的 Data Frame

    Spark 的 Data Frame 针对分布式计算做了相应优化,以便能够处理大规模的数据集,为此它们相对会比较重(Heavy-Weight):它们需要处理网络失败问题,分布式上下文(Distributed Context)也需要有执行 Plan、保证数据冗余性等要求。此外 Spark 的 Data Frame 提供了一系列 ML Pipline 之外的功能,比如结合两个大的数据集,做 map、reduce 和 SQL 查询等操作。

    Scikit-Learn 的 Data Frame

    Scikit-Learn 的 Data Frame 由 Pandas 和 NumPy 提供。它们是相对轻量级的数据结构,提供了一系列类似于 Spark Data Frame 的操作,相比后者少了分布式计算和存储的负担。

    MLeap 的 Data Frame:Leap Frame

    Leap Frame 是非常轻量级的数据结构,其提供了最基础的机器学习操作和 Transformer。因为它的简单性,Leap Frame 针对实时预测引擎和小规模数据预测做了高度优化。Leap Frame 既能作为 Spark Data Frame 的数据抽象,又不会丧失其能够高效存储批处理模式数据的能力

    Leap Frame 示例

    以下是以 JSON 格式存储的 Leap Frame 的一个例子,来自我们的 AirBnB demo:

    1. {
    2. "schema": {
    3. "fields": [{
    4. "name": "state",
    5. "type": "string"
    6. }, {
    7. "name": "bathrooms",
    8. "type": "double"
    9. }, {
    10. "name": "square_feet",
    11. "type": "double"
    12. }, {
    13. "name": "bedrooms",
    14. "type": "double"
    15. }, {
    16. "name": "review_scores_rating",
    17. "type": "double"
    18. }, {
    19. "name": "room_type",
    20. "type": "string"
    21. }, {
    22. "name": "cancellation_policy",
    23. "type": "string"
    24. }]
    25. },
    26. "rows": [["NY", 2.0, 1250.0, 3.0, 50.0, "Entire home/apt", "strict"]]
    27. }

    TensorFlow

    Tensorflow 本身并没有提供类似于 Spark、Scikit-Learn 和 MLeap 的 Data Frame 数据结构,但是考虑到 TensorFlow 依赖于输入节点和输出节点,节点由 Graph 中的 Transformer 操作相连接,而 Data Frame 也是输入节点提供输入数据,输出数据被放在输出节点的新列中,因此 TensorFlow 这个模型实际上能够很好地与我们的 Data Frame 概念相兼容。LEAP Frame 被设计成能够兼容 TensorFlow Graph、Spark Data Frame,以及在一定程度上兼容 Scikit-Learn 的 Data Frame。