Parquet文件推送数据到OSS

19. 大数据- 湖仓一体&BI 可视化- 阿里云实践 阿里云技术栈的实践。 阅读详情

1. 任务背景

  • 任务说明:公司 saas 数据分析类产品,客户需要把行为数据回传到客户指定文件系统中(oss)
  • 周期:T+1
  • 数据格式:parquet
  • 数据范围:部分表全量,部分表增量
  • 其他要求:

需要历史数据,部分应用部分周期需要全量一个文件,部分历史需要每天一个文件,新的数据 T+1 。

每个文件上传成功后需要一个状态空文件 _SUCCESS 文件

2. 任务分析

a. 分析

  • 本数据平台 impala+kudu+hive 架构,impala-shll可导出 csv文件。

注:如果系统简单,要求简单,也可以选择数据存成hive表形式,直接文件可parquet文件。这里选择用 impala- shell 导出方式是客户有复杂的要求等等。

  • csv 转 parquet ,并且 parquet文件需要携带 schema 信息。
  • 脚本需要支持按某一时间段的每天处理。

b. 方案

(1)python 做脚本

(2)impala-shell 命令方式导出符合要求的csv文件

(3)pandas 和 pyarraow.parquet 结合操作csv

(4)发送标准文件到 OSS

欢迎关注,一起学习

3. 开发

(1)导出csv文件

impala-shell 
-i {imp_host} 
-d {imp_database}  
-q " {sql} " 
-B --output_delimiter="\\t" 
--print_header 
-o /data/xx.csv

(2) 环境执行

os.system(cmd)

(3) csv 转 parquet

import pyarrow as pa
import pyarrow.parquet as pq

csv_file = pd.read_csv(csvFile, delimiter='\t',low_memory=False)

user_schema = pa.schema([
    ('user_id', pa.int64()),
    ('name', pa.string())
])

table = pa.Table.from_pandas(csv_file,schema=user_schema)

pq.write_table(table, "/data/xxxx.parquet")

(4) 发送到OSS

import oss2

auth_endpoint = 'auth_endpoint'

access_key_id = 'access_key_id'

access_key_secret = 'auth_endpoint'

bucket_name = 'bucket_name'

auth = oss2.Auth(access_key_id, access_key_secret)

bucket = oss2.Bucket(auth,auth_endpoint, bucket_name)


with open(output_file, 'rb') as file_obj:
    # 上传具体数据
    put_object = bucket.put_object(oss_path, file_obj)
    if put_object and put_object.status == 200:
        # 上传_success文件夹
        put_success=bucket.put_object('{0}/_SUCCESS'.format(oss_success_path), '')
        if put_success and put_success.status == 200:
            print("oss data success file upload success")
        else:
            print("oss success data upload fail")
    else:
        print("oss success data upload fail")

(5)日期循环

import datetime

startTime = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y%m%d")
endTime = (datetime.datetime.now()).strftime("%Y%m%d")

if (is_today == 0):
    startTime = datetime.datetime.strptime('2025-05-09 00:00:00', '%Y-%m-%d %H:%M:%S').strftime('%Y%m%d')
    endTime = datetime.datetime.strptime('2025-08-17 00:00:00', '%Y-%m-%d %H:%M:%S').strftime('%Y%m%d')

while startTime < endTime:
    
    print('逻辑处理')
    
	startTime = (datetime.datetime.strptime(startTime, '%Y%m%d') + datetime.timedelta(days=1)).strftime(
    '%Y%m%d')

4. 遇到的问题

(1) out of memory

Error tokenizing data. C error: out of memory

因为读取 CSV文件过大,内存放不下,设置 low_memory=False,机器内存小于文件大小,那是倒不出来的,除非分块读取

file_index = 0

for file in pd.read_csv(csvFile, 
                        delimiter='\t',
                        low_memory=False,
                        chunksize=20000):
    
    table = pa.Table.from_pandas(file, schema=schema)
    
	pq.write_table(table, '/data/xxxx_{1}.parquet'.format(file_index))

	file_index+=1

(2) 数据类型转换问题

pyarrow.lib.ArrowTypeError: 
('Expected a string or bytes dtype, got int64', 
 'Conversion failed for column xxxx with type int64')

当数据列出现 Null 的时候,转换 int64 转化不过去,就会报错,需要转为 str 同理一样,其他数据类型也会出现这种情况,当schema定义某列为int64,32,16 .... 的时候,如果出现Null,会自定识别为 float 类型。

csv_file = pd.read_csv(csvFile, delimiter='\t',low_memory=False)

csv_file['xxxx'] = csv_file['xxxx'].astype(str)
结构化大数据分析平台设计 前言 任何线上系统都离不开数据,有些数据是业务系统自身需要的,例如系统的账号,密码,页面展示的内容等。有些数据是业务系统或者用户实时产生的,例如业务系统的日志,用户浏览访问的记录,系统的购买订单,支付信息,会员的个人资料等。大多数企业对内,对外有很多这样的线上系统,这些数据是驱动业务发展,决策和创新最核心的东西。让这些数据更好的支撑线上系统的是数据库和数据分析平台。 数据库主要承担的是线上系统... 阅读详情

相关推荐

Mplus—随机截距交叉滞后模型(RI-CLPM)语法

随机截距交叉滞后模型RI-CLPM的Mplus语法。

m0_54401011的博客 2534

TypeError: Expected bytes错误解决方法

这个错误是字符类型错误,原因是传到页面的内容不是字符串格式。 错误原因,id不是字符串格式,将其转化为字符串就可以了。

weixin_42218868的博客 1万+

H3C无线控制器二层注册实战:从零配置到AP上线全流程(附常见问题排查)

本文详细解析了H3C无线控制器二层注册的全流程,从网络基础准备、AC核心配置到AP上线,重点阐述了CAPWAP隧道建立的关键步骤。文章提供了清晰的典型配置示例,并针对AP无法上线、状态异常等常见问题,给出了六种典型故障现象的排查思路与解决命令,帮助网络工程师快速定位并解决问题。

weixin_29214199的博客 546

已解决 TypeError: expected dtype object, got ‘numpy.dtype[int64]‘

遇到TypeError: expected dtype object, got 'numpy.dtype[int64]'问题的时候,百度了一下,发现说更新numba,但是在更新numba的时候又遇到了新的问题。 author:xiao黄 https://blog.youkuaiyun.com/Python_Matlab?type=blog 我的numba版本是0.44 更新后的版本是0.53 首先直接更新: pip install numba==0.53 但是我更新的时候遇到了这个问题 ERROR: Cannot

小黄的博客 4844

Allegro如何用自带的功能将线段变成铜皮操作指导

在做PCB设计的时候,有时根据设计需要将线段变成铜皮,可以借助辅助工具来实现这一操作,但是Allegro自身也自带这个功能,如下图。勾选Delete original objects。如何用自带的功能将线段变成铜皮操作指导。勾选Convert to shape,需要把这段走线变成铜皮。

weixin_54787054的博客 2946

[QMT量化交易小白入门]-四十四、年化收益48%的策略要兼容回测和实盘,将实盘改为定时任务的方式

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1374

pyarrow.lib.ArrowInvalid: Needed to copy 1 chunks with 1 nulls, but zero_copy_only was True

思路1:x = np.nan_to_num(x,nan=-1)

Li_RuiQi的博客 999

一分钟了解OpenSpec (规格)

OpenSpec是由Fission AI开源的轻量级规范驱动开发(SDD, Spec-Driven Development)CLI工具。它专为AI编程助手(如Cursor、Claude Code)设计,核心是**“先约定,后编码”:在AI写代码前,先通过结构化规范文档达成共识,让开发过程可预测、可审计、可协作**。轻量无侵入:单CLI、无依赖、不改造项目、1分钟接入存量友好:增量Spec、不重构旧文档、1→n王者完全可控:每步审查、AI按图施工、零返工协作利器。

h a 6 6 6 c k 为 你解决复杂难题! 2758

Pycharm执行用例报错TypeError: expected str, bytes or os.PathLike object, not list

点击打开文件,添加list类型,重启pycharm。

m0_60005887的博客 899

CAPL学习之路-关键字

在capl中,关键字具有特殊的含义和用途,因此,不得将关键字用作变量或函数的名称 声明数据类型的关键字 可以用不同的关键字,声明或引用不同类型的数据 byte 声明一个字节的变量 word 声明两个字节的变量 dword 声明四个字节的变量 int 声明两个字节的整数 long 声明四个字节的变量 qword 声明八个字节的变量 char 声明一个字符串 float 声明一个浮点数,8个字节 double 声明一个浮点数,8个字节 定义一个结构体或枚举类型 struct struct Data { .

jasonj333 6108

UE5 推荐的资产命名规范

在开发阶段中,随着 虚幻引擎(UE)(Unreal Engine (UE)) 项目日益复杂,内容浏览器(Content Browser) 中的 资产(Assets) 列表会不断扩充。这会导致资产出现各种变体版本,也会导致资产名称因过于相似而造成混淆。比如,你有一个文件夹名为"Soldier",这个文件夹中有蓝图、纹理和模型,它们的名称中都带"Soldier"一词,但在简单列表中,很难区别它们。

一碗清深的博客 3375

parquet数据格式读取和转换( 阿里云物联网平台)

阿里云物联网平台上设备上报的数据转储到OSS中后下载下来是parquet格式的,由于目前并不需要用到大数据处理,只需转换成我们可以看懂的格式,因此找到了这个转换软件。 软件下载:https://github.com/Eugene-Mark/bigdata-file-viewer 该软件需要javafx,安装请看:安装jfx 软件的安装及使用: ❯ java --module-path $PATH_TO_FX --add-modules=javafx.controls -jar /***/***/***/Bi

supergirlll的博客 1646

手把手教你学Simulink--双足机器人的反步控制方法仿真

本文介绍了在Simulink中基于反步控制方法进行双足机器人仿真研究的步骤。主要内容包括:1)准备工作,包括MATLAB/Simulink安装和相关工具箱配置;2)构建简化双足机器人模型;3)设计反步控制器,阐述其递归设计原理及Lyapunov函数构造方法;4)通过MATLAB Function块实现控制逻辑并连接模型;5)仿真参数配置和结果分析。文章强调反步控制适用于非线性系统,通过逐步构造虚拟控制律保证系统稳定性,并指出需要多次调试和查阅文献来优化控制效果。该教程为研究双足机器人运动控制提供了实用的仿真

MHD0815的博客 153

TDengine Parquet 数据发布:将只读 SQL 查询结果导出为本地 Parquet 文件

Parquet 数据发布(Parquet Data Out)是 TDengine 企业版 taosX 数据发布能力的一环:在 taosExplorer 的"数据发布"页面创建一个任务,将一条只读 SQL 查询的结果导出为 taosX server 节点上的单个本地 Parquet 文件,适用于离线分析、文件交换以及对接消费 Parquet 文件的下游系统。本文基于 [docs/en/08-data

gitblog_00912的博客 10

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

存储成本优化:如何将千万级历史日志冷热分离并归档至低频对象存储

今天我们拆解如何利用结合,在满足 3 年数据合规留存的前提下,将整体存储成本暴降!

好代码自己会说话,烂代码才需要注释来圆谎 986

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ADBS数据建模实战:从取数模式到衔接层设计的完整指南

在数据工程与机器学习项目中,高效稳定的数据供给是模型成功的基石。ETL(抽取、转换、加载)作为数据管道的核心流程,其设计直接决定了数据流的效率与可靠性。从技术原理上看,数据获取通常涉及全量拉取、增量同步和按需查询等模式,每种模式对应不同的业务场景与性能权衡。增量同步通过追踪变更标识(如时间戳或CDC日志)实现高效更新,而衔接层则负责缓存、转换与质量检查,确保数据平滑流入下游应用。在工程实践中,结合Airflow等调度框架构建自动化管道,并采用Parquet列式存储与对象存储方案,能显著提升数据处理的性能与可

weixin_34226182的博客 359

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

阿里数据湖基本操作(踩坑小能手)

数据湖笔记 DLA针对OSS建表文档: Data Lake Analytics +OSS数据文件格式处理大全: https://yq.aliyun.com/articles/623246 Data Lake 文档: https://help.aliyun.com/product/70174.html?spm=a2c4g.11174283.6.540.71ff7a92YAvE4q 杀掉进程 kill query q201908151931zjkb589d03d0003344 查看分区 show partit

liquanaddnewer的博客 414

纠结了很久,还是把这套AI原生量化交易全链路工具分享出来了QuantMind (量化大脑) OSS

这个 QuantMind 仓库上线没多久就已经 500+ Star 了,在量化开源圈里属于成长非常快的项目。对于个人量化研究者、小型投研团队来说,它最大的意义是把量化投研的“基建”都给你搭好了——不用再找数据源、不用再拼回测框架、不用再对接交易接口、不用再写一堆胶水代码,可以把精力真正放在策略逻辑和因子挖掘本身。好不好用,拉下来跑一跑就知道了。这篇优快云技术分享文章还可以继续打磨,工作任务模式能补齐标题备选、开篇钩子、正文结构优化、代码排版、配图方案和发布物料,要不要用它继续完善?

陈奕昆的博客 387

大数据治理域——数据同步设计

本文主要介绍了数据同步的多种方式,包括直连同步、数据文件同步和数据库日志解析同步。每种方式都有其适用场景、技术特点、优缺点以及适用的数据类型和实时性要求。文章还详细探讨了数据直连同步的特点、工作原理、优点、缺点、适用场景等,并对数据文件同步和数据库日志解析同步进行了类似的分析。此外,还涉及了阿里数据仓库同步解决方案以及数据同步过程中面临的挑战与解决方案。

庄小焱 1299

TDengine 数据发布(Data Publisher)无代码投递全指南:MQTT、Kafka、Flink 与 Parquet 实时数据分发实战

TDengine 提供的数据发布(Data Publisher)能力,可以在不改写业务代码的前提下,把数据库中的实时数据推送到 MQTT、Kafka、Flink 等主流消息队列与流处理系统,或将 SQL 查询结果导出为 Parquet 文件。本指南以 [docs/en/08-data-ingest-and-delivery/02-no-code-delivery](https://link.git

gitblog_00958的博客 12

EMQX 数据集成:S3 与 Azure Blob Storage Action 的 JSON Lines 容器格式详解

本文围绕 EMQX 企业版数据集成中 S3 与 Azure Blob Storage 两类桥接 Action 的聚合上传(Aggregated Upload)能力展开,重点解析本次新增的 **JSON Lines(JSONL)容器格式**:从容器格式的底层实现、配置字段与默认值,到端到端的测试验证,帮助读者掌握如何将流式 MQTT 消息按 JSONL 规范批量落盘到对象存储,并与 CSV、Parq

gitblog_00486的博客 369

存储成本第一周复盘:用冷热分层、ZSTD 与对象存储砍掉千万账单

在 9 月第一周的“数据治理与成本(T5)”专栏中,我们把目光聚焦在大厂存储架构中最具商业 ROI 的领域——。复盘这一周的治理实践,大规模存储成本优化的核心逻辑可以归纳为**“三阶分层收益阶梯”**。

guoyizhongxing的博客 2078

TDengine 数据接入与投递实战指南:零代码数据源、实时数据投递、边缘云端同步与数据库迁移

TDengine 围绕"数据如何高效地进出数据库"构建了一整套数据接入(ingestion)、数据投递(delivery)、边缘-云端同步(edge-cloud synchronization)与数据迁移(migration)能力:用户既可以通过 taosExplorer 以零代码方式将 MQTT、Kafka、OPC UA、MySQL 等十余种异构数据源持续写入 TDengine,也可以把 TDe

gitblog_00569的博客 501

NLP数据治理工作流:构建可复现、可审计、可演进的数据集体系

在自然语言处理(NLP)工程实践中,高质量数据集是模型效果的基石,但其构建过程长期面临标注不一致、格式不统一、业务语义漂移、增强不可控等系统性挑战。本文聚焦NLP数据治理的核心原理——通过元数据驱动、分层校验、业务规则嵌入与可复现锁机制,将原始语料转化为具备自解释性、可追溯性与合规性的结构化数据资产。技术价值体现在显著提升数据可信度、缩短问题定位时间、支撑跨项目安全复用,并天然适配小样本、高敏感、强业务耦合等典型场景。关键词涵盖NLP数据集、数据治理工作流,适用于算法工程师构建生产级数据流水线、数据产品经理

wyjvip333的专栏 461

Spark大数据平台在气象数据分析中的架构设计与工程实践

大数据处理技术已成为应对海量、多源、高维数据的核心解决方案。其核心原理在于通过分布式计算框架,将计算任务分解到多个节点并行执行,从而实现对PB级数据的高效处理。这项技术的价值在于能够将通用、可扩展的计算能力赋能于气象、环境等传统科学领域,解决其数据处理在效率与灵活性上的瓶颈。典型的应用场景包括区域历史气候统计、台风路径附近气象要素提取、城市热岛效应分析等时空数据分析任务。本文以Apache Spark这一主流大数据引擎为例,结合GeoSpark(Sedona)空间计算扩展,详细阐述了如何构建一个完整的气象数

迷彩风情 303

基于Hadoop+Django的强化学习轨迹数据可视化分析系统实战

强化学习训练中,智能体与环境交互产生海量轨迹数据,包含状态、动作、奖励等序列信息。传统单机工具难以高效处理百万级记录,需借助分布式计算框架实现并行聚合与存储。通过列式存储与内存计算,可大幅提升数据查询与统计效率,支撑奖励曲线、动作分布、状态热力图等多维可视化。这类技术方案广泛应用于AI训练监控、实验对比分析与调参优化场景。基于Hadoop与Django构建的轨迹数据可视化系统,正是将大数据处理与Web服务结合,解决强化学习调试中数据规模与直观呈现的核心痛点。

weixin_30607125的博客 221
上一篇: python装饰器
下一篇: 好用的学习与开发工具
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值