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 由 PandasNumPy 提供。它们是相对轻量级的数据结构,提供了一系列类似于 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。