分布式Python计算服务MaxFrame测评

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 一文带你入门分布式Python计算服务MaxFrame

产品概述

​ 分布式计算框架MaxCompute MaxFrame是阿里云推出的一款专为大数据处理和AI开发设计的解决方案。它基于Python编程接口,并完全兼容Pandas数据操作库,使得用户能够以熟悉的方式高效地进行数据处理。MaxFrame能够自动将Pandas算子转化为分布式计算任务,利用MaxCompute的海量弹性计算资源,实现数据的并行处理和加速计算。这一框架直连MaxCompute数据,无需本地数据传输,降低了开发成本,提高了处理效率,适用于大规模数据处理、科学计算及机器学习/AI开发等多种应用场景。架构图如下:

image

实践体验

服务开通

因为接下来体验的两个实践均会使用到大数据开发治理平台DataWorks和大数据计算服务MaxCompute,所以首先我们要对这个产品或服务进行开通。

  • DataWorks开通

对于大数据开发治理平台DataWorks服务的开通有两种方式,一是针对老用户可以参照如下方式进行购买:

进入DataWorks服务开通页,地域选择华东1(杭州)、基础版、按量付费,其他默认。

image.png

image.png

image.png

勾选服务协议,点击确认订单并支付。

image.png

校验通过后,点击下一步。

image.png

价格清单确认无误后,点击下一步创建订单。

image.png

在支付页面,点击支付即可。

image.png

当出现下图这个页面时,就表示DataWorks服务已成功创建。

image.png

如果你是新用户,则可以直接进入免费试用首页找到对应产品开通即可:

image.png

在产品开通页面填入资源组名称,因为试用默认只有一个可用区,所以这里保持默认。

image.png

如果是首次试用DataWorks产品,这里需要先关联角色,点击创建关联角色即可。

image.png

确认如上信息无误后,点击立即试用。

image.png

点击页面的管理试用,可以在费用与成本中看到试用详情。

image.png

  • MaxCompute开通

接下来继续开通大数据计算服务MaxCompute,进入产品控制台,点击立即开通。

image.png

这里唯一需要注意的一点就是,产品的可用区要保持和DataWorks一致,比如这里的华东2(上海)。

image.png

提交后,进入下一步

image.png

继续下一步

image.png

在支付页面点击立即支付即可。

image.png

出现下图就表明开通成功。

image.png

使用MaxFrame

按照官方文档,MaxFrame的使用有三种方式,接下来逐个阐述:

  • 在本地环境中使用

    本地环境使用MaxFrame有两个大前提,一是本地系统中已安装3.7或3.11版本的Python环境且有pip工具。并通过如下命令安装:

    #安装maxframe
    pip install --upgrade maxframe
    #验证maxframe是否安装成功
    python -c "import maxframe.dataframe as md"
    

image.png

image.png

二是需要新建一个MaxCompute项目。登录MaxCompute控制台,在左上角选择地域。在左侧导航栏选择工作区 > 项目管理,并单击新建项目。如下:

image.png

这里先创建一个测试的python文件,代码如下:

  import os
  import maxframe.dataframe as md
  from odps import ODPS
  from maxframe import new_session
  # 创建MaxCompute入口
  o = ODPS(
      # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
      # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
      # ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET提前写入电脑的系统变量
      # project填写MaxCompute新建的项目名称
      # endpoint填写MaxCompute的公网访问地址URL
      os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
      os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
      project='your-default-project',
      endpoint='your-end-point',
  )
  table = o.create_table("test_source_table", "a string, b bigint", if_not_exists=True)
  with table.open_writer() as writer:
      writer.write([
          ["value1", 0],
          ["value2", 1],
      ])
  # 创建MaxFrame session
  session = new_session(o)
  df = md.read_odps_table("test_source_table",index_col="b")
  df["a"] = "prefix_" + df["a"]
  # 打印dataframe数据
  print(df.execute().fetch())
  # MaxFrame DataFrame数据写入MaxCompute表
  md.to_odps_table(df, "test_prefix_source_table").execute()
  # 销毁 maxframe session
  session.destroy()

直接运行python maxframetest.py文件,结果如下:

image.png

接着进入MaxCompute控制台,点击左侧导航栏的的SQL分析,查询上述表格数据是否创建成功。如下:

image.png

通过以上操作,我们已经成功在本地环境中安装了MaxFrame,并成功连接到MaxCompute。

  • 在DataWorks中使用

    为了配合接下来的实验,这里首先需要在MaxCompute中新建两个项目,一个用于生产环境,一个用于开发环境。

image.png

进入DataWorks控制台,绑定MaxCompute数据源。如下:

image.png

在新建计算资源页面分别关联MaxCompute的两个项目,如下:

image.png

点击下一步,就可以看到绑定已经成功。

image.png

接下来在DataWorks的数据开发页面创建PyODPS 3节点,如下:

image.png

image.png

在MaxCompute会话框中写入如下代码:

  import maxframe.dataframe as md
  from maxframe import new_session
  from maxframe.config import options
  options.sql.enable_mcqa = False
  table = o.create_table("test_source_table", "a string, b bigint", if_not_exists=True)
  with table.open_writer() as writer:
      writer.write([
          ["value1", 0],
          ["value2", 1],
      ])
  # 创建MaxFrame session
  session = new_session(o)
  df = md.read_odps_table("test_source_table",index_col="b")
  df["a"] = "prefix_" + df["a"]
  # 打印dataframe数据
  print(df.execute().fetch())
  # MaxFrame DataFrame数据写入MaxCompute表
  md.to_odps_table(df, "test_prefix_source_table").execute()
  # 销毁 maxframe session
  session.destroy()

image.png

直接运行代码,结果如下:

image.png

同样地,我们前往MaxCompute控制台,执行一个SQL分析,结果如下:

image.png

到这,我们也完成了在大数据开发治理平台DataWorks中完成了MaxFrame的安装,并实现了与大数据计算服务MaxCompute的联动。

  • 在DataWorks镜像中使用

    最后,让我们看看最后一种方式体验如何。首先登录DataWorks控制台,切换至DataWorks工作空间所在地域后,单击左侧导航栏的镜像管理,选择自定义镜像,填入对应信息。

image.png

接着,点击发布,在正式发布前,需要对镜像进行测试,如下:

image.png

完成测试后,点击发布,成功发布后修改自定义镜像的归属工作空间。

image.png

image.png

单击右侧调度配置,配置资源属性,选择与自定义镜像发布绑定的资源组保持一致。

image.png

接下来的操作同第二种方式一致,这里就不再赘述。到这,MaxFrame的三种使用方式均已体验,下面开始正式的实践体验。

基于MaxFrame实现分布式Pandas处理

基于上述搭建的本地环境,我们使用如下代码直接进行测试:

from odps import ODPS
from maxframe.session import new_session
import maxframe.dataframe as md
import pandas as pd
import os

o = ODPS(
    # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
    # ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET提前写入电脑的系统变量
    # project填写MaxCompute新建的项目名称
    # endpoint填写MaxCompute的公网访问地址URL
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

data_sets = [{
   
    "table_name": "product",
    "table_schema" : "index bigint, product_id bigint, product_name string, current_price bigint",
    "source_type": "records",
    "records" : [
        [1, 100, 'Nokia', 1000],
        [2, 200, 'Apple', 5000],
        [3, 300, 'Samsung', 9000]
    ],
},
{
   
    "table_name" : "sales",
    "table_schema" : "index bigint, sale_id bigint, product_id bigint, user_id bigint, year bigint, quantity bigint, price bigint",
    "source_type": "records",
    "records" : [
        [1, 1, 100, 101, 2008, 10, 5000],
        [2, 2, 300, 101, 2009, 7, 4000],
        [3, 4, 100, 102, 2011, 9, 4000],
        [4, 5, 200, 102, 2013, 6, 6000],
        [5, 8, 300, 102, 2015, 10, 9000],
        [6, 9, 100, 102, 2015, 6, 2000]
    ],
    "lifecycle": 5
}]

def prepare_data(o: ODPS, data_sets, suffix="", drop_if_exists=False):
    for index, data in enumerate(data_sets):
        table_name = data.get("table_name")
        table_schema = data.get("table_schema")
        source_type = data.get("source_type")

        if not table_name or not table_schema or not source_type:
            raise ValueError(f"Dataset at index {index} is missing one or more required keys: 'table_name', 'table_schema', or 'source_type'.")

        lifecycle = data.get("lifecycle", 5)
        table_name += suffix

        print(f"Processing {table_name}...")
        if drop_if_exists:
            print(f"Deleting {table_name}...")
            o.delete_table(table_name, if_exists=True)

        o.create_table(name=table_name, table_schema=table_schema, lifecycle=lifecycle, if_not_exists=True)

        if source_type == "local_file":
            file_path = data.get("file")
            if not file_path:
                raise ValueError(f"Dataset at index {index} with source_type 'local_file' is missing the 'file' key.")
            sep = data.get("sep", ",")
            pd_df = pd.read_csv(file_path, sep=sep)
            ODPSDataFrame(pd_df).persist(table_name, drop_table=True)
        elif source_type == 'records':
            records = data.get("records")
            if not records:
                raise ValueError(f"Dataset at index {index} with source_type 'records' is missing the 'records' key.")
            with o.get_table(table_name).open_writer() as writer:
                writer.write(records)
        else:
            raise ValueError(f"Unknown data set source_type: {source_type}")

        print(f"Processed {table_name} Done")

prepare_data(o, data_sets, "_maxframe_demo", True)

image.png

进入MaxCompute控制台,执行SQL分析,分别查询通过上述代码导入的测试数据。

image.png

image.png

接下来通过如下代码使用MaxFrame进行数据分析,来获取所有产品对应的年份和价格。

from odps import ODPS
from maxframe.session import new_session
import maxframe.dataframe as md
import os

o = ODPS(
    # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
    # ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET提前写入电脑的系统变量
    # project填写MaxCompute新建的项目名称
    # endpoint填写MaxCompute的公网访问地址URL
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

session = new_session(o)

#session id是一串用于关联MaxFrame task的字符,对于调试和追踪任务状态有重要的作用。
print(session.session_id)

sales = md.read_odps_table("sales_maxframe_demo", index_col="index")
product = md.read_odps_table("product_maxframe_demo", index_col="product_id")

#这里的df并不会立即执行,除非您使用df.execute()来触发。
#这意味着所有的计算都将最终完全在MaxCompute集群完成,避免了中间所不必要的数据传输和阻塞。
df = sales.merge(product, left_on="product_id", right_index=True)
df = df[["product_name", "year", "price"]]

print(df.execute().fetch())

#保存结果到MaxCompute表中,并销毁Session
md.to_odps_table(df, "result_df", overwrite=True).execute()

session.destroy()

运行结果如下:

image.png

通过如下代码实现查询已售产品对应的年份,价格和数量。

from odps import ODPS
from maxframe.session import new_session
import maxframe.dataframe as md
import os

o = ODPS(
    # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
    # ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET提前写入电脑的系统变量
    # project填写MaxCompute新建的项目名称
    # endpoint填写MaxCompute的公网访问地址URL
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

session = new_session(o)

#session id是一串用于关联MaxFrame task的字符,对于调试和追踪任务状态有重要的作用。
print(session.session_id)

# 聚合获取每个产品的第一个年份
min_year_df = md.read_odps_table("sales_maxframe_demo", index_col="index")
min_year_df = min_year_df.groupby('product_id', as_index=False).agg(first_year=('year', 'min'))

# join 找到对应的销售记录
sales = md.read_odps_table("sales_maxframe_demo", index_col=['product_id', 'year'])
result_df = md.merge(sales, min_year_df, 
                        left_index=True, 
                        right_on=['product_id','first_year'],
                        how='inner')

#这里的result_df并不会立即执行,除非您使用 result_df.execute()来触发。
#这意味着所有的计算都将最终完全在MaxCompute中集群完成,避免了中间所不必要的数据传输和阻塞。
result_df = result_df[['product_id', 'first_year', 'quantity', 'price']]

print(result_df.execute().fetch())

#销毁 Session
session.destroy()

image.png

又通过如下代码实现查询用户消费最多的产品。

from odps import ODPS
from maxframe.session import new_session
import maxframe.dataframe as md
import os

o = ODPS(
    # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
    # ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET提前写入电脑的系统变量
    # project填写MaxCompute新建的项目名称
    # endpoint填写MaxCompute的公网访问地址URL
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

session = new_session(o)

#session id 是一串用于关联 MaxFrame task 的字符,对于调试和追踪任务状态有重要的作用。
print(session.session_id)

sales = md.read_odps_table("sales_maxframe_demo", index_col="index")
product = md.read_odps_table("product_maxframe_demo", index_col="product_id")

sales['total'] = sales['price'] * sales['quantity']

product_cost_df = sales.groupby(['product_id', 'user_id'], as_index=False).agg(user_product_total=('total','sum'))
product_cost_df = product_cost_df.merge(product, left_on="product_id", right_index=True, how='right')

user_cost_df = product_cost_df.groupby('user_id').agg(max_total=('user_product_total', 'max'))
merge_df = product_cost_df.merge(user_cost_df, left_on='user_id', right_index=True)

#这里的 result_df 并不会立即执行,除非您使用 result_df.execute()来触发。
#这意味着所有的计算都将最终完全在 MaxCompute 中集群完成,避免了中间所不必要的数据传输和阻塞。
result_df = merge_df[merge_df['user_product_total'] == merge_df['max_total']][['user_id', 'product_id']].drop_duplicates().sort_values(['user_id'], ascending = [1])

print(result_df.execute().fetch())

#销毁 Session

session.destroy()

image.png

通过实验不难发现,使用MaxFrame进行数据分析比起传统的查询效率明显是提升的。

基于MaxFrame实现大语言模型数据处理

通过如下代码实现对敏感信息的脱敏处理。

import os
import time
import numpy as np
import maxframe.dataframe as md
from odps import ODPS
from maxframe import new_session
# from maxframe.udf import with_resource_libraries
from maxframe.config import options
from maxframe import config

o = ODPS(
    # 确保 ALIBABA_CLOUD_ACCESS_KEY_ID 环境变量设置为用户 Access Key ID,
    # ALIBABA_CLOUD_ACCESS_KEY_SECRET 环境变量设置为用户 Access Key Secret,
    # ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET提前写入电脑的系统变量
    # project填写MaxCompute新建的项目名称
    # endpoint填写MaxCompute的公网访问地址URL
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='maxframetest',
    endpoint='https://service.cn-hangzhou.maxcompute.aliyun.com/api',
)
config.options.sql.settings = {
   
    "odps.session.image": "common"
}
def clean_copyright(row):
    import re
    pat = re.compile('/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/')
    cpat = re.compile('copyright', re.IGNORECASE)

    text = row['content']

    if not text:
        return row

    r = pat.search(text)
    if r:
        span = r.span()
        sub = text[span[0]:span[1]]
        if cpat.search(sub):
            # cut it
            text = text[:span[0]] + text[span[1]:]

        row['content'] = text
        return row

    lines = text.split('\n')
    skip = 0

    for k in range(len(lines)):
        if (lines[k].startswith('//') or lines[k].startswith('#')
                or lines[k].startswith('--') or not lines[k]):
            skip = skip + 1
        else:
            break

    if skip:
        text = '\n'.join(lines[skip:])
    row['content'] = text

    return row
def maxframe_job():
    s_time = time.time()
    table_name = 'bigdata_public_dataset.data_science.llm_redpajama_github_demo_data'

    session = new_session(o)
    print('session id: ', session.session_id)

    df = md.read_odps_table(table_name, index_col='id')
    df = df.apply(
                clean_copyright,
                axis=1,  # row
                output_type="dataframe",
            )

    out_table = 'tmp_mf_clean_copyright'
    md.to_odps_table(df, out_table).execute()
    session.destroy()

maxframe_job()

image.png

由于结果返回很多,所以这里只显示100条。

image.png

虽然数据量很大,但查询效率一点也没影响。

体验总结

整体感受

1、在使用MaxFrame时,Python编程接口非常易于上手,特别是对于熟悉Python开发的用户来说,MaxFrame内置Python开发环境,开箱即用,对于初学者来说无需额外配置开发环境,可以直接上手进行Python开发。几乎可以无缝过渡到MaxFrame的使用中。然而,在使用过程中,我也遇到了一些不便之处。对于初学者来说,虽然MaxFrame提供了一些文档和入门演示,但在实际操作中,如果遇到具体问题,仍然希望能够有更便捷的在线支持或社区交流渠道。

2、在体验MaxFrame的过程中,产品功能基本满足了我的预期,我能够轻松地进行各种数据处理和分析任务。此外,MaxFrame还与MaxCompute Notebook、镜像管理等功能共同构成了完整的Python开发生态,提升了我在MaxCompute上的Python开发体验。然而,对于数据的可视化和交互分析方面,我希望能够有更多的支持。建议在MaxFrame中增加更多的数据可视化和交互分析功能,以便用户能够更加直观地了解数据和分析结果。

3、针对AI数据处理和Pandas处理场景,首先期待在后续版本中进一步优化算子性能,以满足更加复杂和高效的计算需求。此外,建议在MaxFrame中增加更多的内置函数和算子,以便用户能够更加便捷地进行数据处理和分析任务。

问题反馈

1、首先,测评提供的试用产品链接是不全的,活动首页仅提供了大数据计算服务MaxCompute的试用,并没有提供大数据开发治理DataWorks的试用。

image.png

2、最佳实践文档存在多处内容描述不全或模糊不清问题,比如实例代码中就缺少对于ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET需设置为本机系统变量的具体说明,仅简单一笔带过,对新手小白非常不友好。

image.png

再比如,还有下图这段,用户即可以使用RAM权限,也可以直接使用云账号权限,对于临时测试,云账号权限会直接了当。为了更好让用户理解,应该配上具体配置的截图,而不是给个链接让用户去找,对于新手用户非常不友好,也许不愿折腾的用户到这就放弃了。

image.png

此外,还有下图这个,对于第一次使用MaxCompute产品的用户,这个描述多少有点模糊,更改为控制台上具体的功能描述可能会更好,比如进行SQL分析。或者配上具体截图也能更直观表述。

image.png

文档中对于性能的对比描述也非常简略,缺少相关运行截图的佐证。

image.png

在如何利用DataWorks自定义镜像安装MaxFrame内容描述中,就存在容易理解模糊问题,下图这段用户可能就没法继续了,因为实例默认开通的就是Serverless资源组。

image.png

在大语言模型数据处理的内容中也存在缺乏问题,下图的SQL应该添加limit输出限制,按照文档SQL是没法输出结果的。

image.png

3、最佳实践内容明显缺失,比如对于如何使用MaxFrame文档是有提到三种方式,可到了最佳实践这里,实例代码仅提供了本地环境实现这一种方式,显然是不完整的。

image.png

image.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
4天前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
17 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
5天前
|
数据采集 人工智能 分布式计算
🚀 MaxFrame 产品深度体验评测:Python 分布式计算的未来
在数据驱动的时代,大数据分析和AI模型训练对数据预处理的效率要求极高。传统的Pandas工具在小数据集下表现出色,但面对大规模数据时力不从心。阿里云推出的Python分布式计算框架MaxFrame,以“Pandas风格”为核心设计理念,旨在降低分布式计算门槛,同时支持超大规模数据处理。MaxFrame不仅保留了Pandas的操作习惯,还通过底层优化实现了高效的分布式调度、内存管理和容错机制,并深度集成阿里云大数据生态。本文将通过实践评测,全面解析MaxFrame的能力与价值,展示其在大数据和AI场景中的卓越表现。
18 4
🚀 MaxFrame 产品深度体验评测:Python 分布式计算的未来
|
22小时前
|
分布式计算 数据处理 MaxCompute
云产品评测|分布式Python计算服务MaxFrame
云产品评测|分布式Python计算服务MaxFrame
16 2
|
5天前
|
人工智能 分布式计算 数据处理
有奖评测,基于分布式 Python 计算服务 MaxFrame 进行数据处理
阿里云MaxCompute MaxFrame推出分布式Python计算服务MaxFrame评测活动,助力开发者高效完成大规模数据处理、可视化探索及ML/AI开发。活动时间为2024年12月17日至2025年1月31日,参与者需体验MaxFrame并发布评测文章,有机会赢取精美礼品。
|
10天前
|
机器学习/深度学习 分布式计算 数据挖掘
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
36 4
|
13天前
|
分布式计算 数据处理 MaxCompute
分布式Python计算服务MaxFrame使用心得
大家好,我是V哥。MaxFrame是阿里云自研的分布式计算框架,专为Python开发者设计,支持大规模数据处理和AI模型开发。MaxFrame适用于快速进行数据处理、数据科学和交互式探索,支持按量付费及包年包月两种计费方式。通过两个案例(金融数据清洗和大语言模型预处理),展示了MaxFrame在大规模数据处理中的显著性能提升。安装MaxFrame客户端只需简单几步,轻松开启高效数据处理之旅。欢迎关注威哥爱编程,一起交流技术心得!
|
3月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
1月前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
108 5
|
2月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
72 8
|
2月前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
62 16