spark dataframe base2

Spark RDD 的 shuffle 和 分区 Spark RDD 的 shuffle 和 分区 分区的作用 RDD 使用分区来分布式并行处理数据, 并且要做到尽量少的在不同的 Executor 之间使用网络交换数据, 所以当使用 RDD 读取数据的时候, 会尽量的在物理上靠近数据源, 比如说在读取 Cassandra 或者 HDFS 中数据的时候, 会尽量的保持 RDD 的分区和数据源的分区数, 分区模式等一 一对应。 分区和 Shuffle 的关系 分区的主要作用是用来实现并行计算, 本质上和 Shuffle 没什么关系, 但是往往在进行数据处理的 阅读详情
// 先对employee进行过滤,只统计20岁以上的员工
      emp.filter("age > 20")
      // 需要跟department数据进行join,然后才能根据部门名称和员工性别进行聚合
      // 注意:untyped join,两个表的字段的连接条件,需要使用三个等号
      .join(dep, $"depId" === $"id")
      // 根据部门名称和员工性别进行分组
      .groupBy(dep("name"), emp("gender"))
      // 最后执行聚合函数
      .agg(avg(emp("salary")), avg(emp("age")))
      // 执行action操作,将结果显示出来
      .show()

其中agg,avg会报错,引入下面语句

import org.apache.spark.sql.functions._

建议这么写

 .join(dep, emp("depId") === dep("id"))
spark 集群处理后转单机pyspark 或 pands 数据处理 的方法 文章大纲spark 环境下载conda 环境python 执行 字符串代码参考文献 spark 环境下载 历史包列表: https://archive.apache.org/dist/spark/ conda 环境 # pyspark 2.X 版本的python 必须是3.7 或者3.6 ,高的会报错。 conda create -n pyspark_247 python=3.7 版本不对可能会碰见如下报错: File "/xxx/xxx/lib/python3.9/site-packages/pysp 阅读详情

相关推荐

MATLAB图像去噪实战:如何用巴特沃斯滤波器完美去除横条纹(附完整代码)

本文详细介绍了如何使用MATLAB中的巴特沃斯滤波器有效去除图像中的横条纹噪声。通过频域分析和滤波处理,结合完整的代码示例,帮助读者掌握从噪声分析到参数优化的全流程技术,实现高质量的图像去噪效果。

weixin_30566063的博客 563

告别繁琐测试:Spark-Testing-Base让Spark应用测试效率提升300%

Spark-Testing-Base是一款专为Apache Spark应用测试设计的基础类库,它通过提供预配置的测试基类和实用工具,帮助开发者告别冗长的测试代码,显著提升测试效率。无论是DataFrame、Dataset还是RDD测试,这款工具都能简化流程,让测试工作变得轻松高效。 ## 🚀 为什么选择Spark-Testing-Base? 传统的Spark应用测试往往需要编写大量重复代码来

gitblog_01010的博客 500

详解AUTOSAR:DaVinci Configurator配置CAN和UART数据协议解析器(RH850)(实战篇—1)

通过学习本篇博文项目,将会把所学的DaVinci Configurator知识系统串联起来。

不脱发的程序猿 2812

【亲测免费】推荐开源项目:Spark-Testing-Base —— 轻松掌握Spark测试的得力助手

Spark-Testing-Base 是一款专为 Apache Spark 开发者打造的开源测试框架,它提供了一系列基础类和工具,帮助开发者轻松编写高效、可靠的 Spark 应用测试。无论是 DataFrame 操作、Streaming 流处理还是 Dataset 转换,这款工具都能显著简化测试流程,让你专注于业务逻辑而非测试环境搭建。 ## 🚀 为什么选择 Spark-Testing-Bas

gitblog_00035的博客 504

uniapp(全端兼容) - 最新详细实现支付键盘功能组件,从底部弹出数字键盘输入支付密码进行付款交互效果,自定义支付密码键盘仿微信、支付宝支付键盘,1~9密码数字键盘,电商支付(详细示例代码复制运行

uniapp,微信小程序,自定义数字键盘,输入支付密码的键盘组件,uniapp小程序如何实现从底部弹出输入支付密码自定义键盘功能,uniapp小程序密码支付键盘组件插件,自定义数字键盘输入页面,怎么封装底部弹窗自定义数字键盘用于输入支付密码,uniapp小程序仿类似电商支付密码输入模态框,uniapp微信小程序平台实现自定义支付密码键盘,uniapp 密码支付,数字键盘,安全键盘,交易键盘,交易密码,交易密码输入框,uniapp自定义支付键盘: uniapp自定义支付键盘,uniapp小程序端实现键盘输入支

✅ 精选推荐文章 2905

5、癌症数据预处理技术与深度学习在癌症预测中的应用

本文详细介绍了癌症数据预处理技术和深度学习在癌症预测中的应用。针对CT扫描图像、X射线图像、超声图像、基因表达数据和文本数据等不同类型的癌症数据,分别阐述了去噪、插值、配准、归一化等预处理技术的具体方法。同时,分析了深度学习在乳腺癌、白血病和宫颈癌预测中的作用,结合相关影响因素探讨了模型的应用潜力。此外,还总结了深度学习在癌症预测中面临的挑战及未来发展方向,为癌症的早期诊断与精准预测提供了理论支持和技术参考。

alice7model的博客 123

Spark升级注意事项

2.2、 升级注意: 2.2.1、 代码改变 注意从2.0.0开始DataFrame 被Dataset<Row>替换 Iterable<String> 被替换成Iterator<String> com.google.common.base.Optional变成了 org.apache.spark.api.java.Optional ...

chbxw 748

实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)

一、需求描述 目前使用的公司网络只能够上内网,但是又有上外网查资料的需求: ①想要实现电脑既能上内网的同时也可以上外网; ②想要使用其他外网电脑使用外网连接到该电脑,通过该电脑访问内部的网络内容。 二、准备内容 电脑必须具备两个网卡,即:可以同时连接内网和外网(比如我的笔记本就可以:使用网线连接笔记本网口与内网通讯,使用WIFI连接手机热点访问外部网络); 注意:如果只有一个网口,可以另外购买USB的无线网卡来实现上网卡。 三、实现电脑同时上内网和外网的操作步骤 3.1、网络拓扑图 ..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

spark 广播变量 之广播表(dataframe)

Broadcast variables(广播变量)允许程序员将一个read-only(只读的)变量缓存到每台机器上,而不是给任务传递一个副本。它们是如何来使用呢,例如,广播变量可以用一种高效的方式给每个节点传递一份比较大的input dataset(输入数据集)副本。在使用广播变量时,Sp...

chengujun7940的博客 6757

海洋捕食者算法(MPA)详解:从海洋生态智慧到高性能优化

摘要: 海洋捕食者算法(MPA)是一种基于海洋生态觅食行为的元启发式优化算法,模拟捕食者(如鲨鱼)的布朗运动和莱维飞行策略进行全局与局部搜索。算法分为三阶段:高速比阶段(全局探索)、单位速度比阶段(平衡搜索)和低速比阶段(局部开发),通过精英矩阵和FADs效应(概率扰动)避免早熟收敛。MPA具有参数少、收敛快、寻优能力强等特点,适用于复杂优化问题,其数学模型将生物行为转化为随机游走与自适应策略,并通过收敛因子动态调整探索-开发平衡。实验表明,MPA在多个基准问题上表现优异。

qq_42212808的博客 273

使用 Tesseract 在 C# 中进行光学字符识别(OCR)

你可以根据需要对 Tesseract 进行自定义配置,例如设置识别的分辨率、识别模式等。// 只识别数字// 设置自定义变量本文只讲述了简单的使用方法,未涉及字库训练,识别的准确率与训练的字库有关。

仰望星空的博客 4733

spark-testing-base使用指南

**spark-testing-base** 是一个用于简化 Apache Spark 应用程序测试过程的库,由 Holden Karau 开发并维护。该库提供了基础类,让你在编写Spark相关的测试时,能够更便捷地设置本地模式下的Spark环境,并轻松进行单元测试,而无需每次手动配置和清理。它支持Scala和Java项目,通过集成ScalaCheck和其它工具,进一步提高了测试的自动化水平和效率...

gitblog_00602的博客 557

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

SPARK-SQL - DataFrame创建方式汇总

创建DataFrame的方式 从JavaRDD<T>与类类型中创建 从List<T>与类类型中创建 从JavaRDD<Row>与schema中创建 从List<Row>与schema中创建 从外部数据源中创建 如spark.read().json等 import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import o

小哇 326

精雕软件(JDpaint) 5.5 绿色版

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Synapse ML:用Spark DataFrame统一AI工程化流水线

Apache Spark 作为成熟的大数据处理引擎,其核心价值在于分布式计算与SQL/DataFrame抽象的统一性。当机器学习工程面临多框架胶水代码、跨系统数据搬运和模型服务割裂等典型痛点时,AI工程化亟需一种能深度融入现有数据栈的轻量级集成范式。Synapse ML 正是这一需求的实践答案——它不替代Scikit-learn或PyTorch,而是将各类AI能力(如ONNX模型、LightGBM、认知服务)封装为Spark原生Transformer算子,实现predict()调用与filter()/joi

cuili5839的博客 319

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Lecture 2: Spark RDDs, Dataframe, ML Piplines, and Parallelizations

Lecture 2: Spark RDDs, Dataframe, ML Piplines, and Parallelizations

Yoga_sky的博客 253

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

在Spark Dataframe中动态创建多列

假设我们有一个包含文本数据的DataFrame,我们想要根据用户的搜索关键词,动态地将该搜索关键词作为新列添加到DataFrame中。通过定义一个函数 `keyword_embedding`,我们可以将搜索关键词转换为向量表示,并将其作为新列添加到DataFrame中。在Spark DataFrame中动态创建多列是常见的需求,可以通过使用`selectExpr`或`withColumn`方法来完成。如果你需要创建的是单个新列,可以使用 `withColumn` 方法。# 初始化SparkSession。

626

Spark 2.x与1.x的对比及分析

DataFrame与Dataset 统一化了,只剩下DataSet了 flatMapToPair 由reture list变为reture iterator ForeachRDD 不再return null 更新状态的函数中,使用的Optional来自com.google.common.base,函数不能用 Spark streaming 中JavaStreamingContextFac...

给我一点温度 922

DataComPy 源码深度剖析:策略模式如何撑起 4 种 DataFrame 对比引擎

DataComPy 是一个用 Python 编写的开源 DataFrame 对比库,一个库就能完成 Pandas、Polars、Spark、Snowflake 四种 DataFrame 后端的表级对比,输出人类可读的对比报告。本文从源码出发,带你拆解它如何用「策略模式」把 4 种后端的差异隔离在各自模块里,让对比引擎既统一又可扩展。 ## 项目速览:一个接口,4 个后端 DataComPy 的

gitblog_00827的博客 943

在 Spark SQL 中,如何使用 SQL 查询 DataFrame?

Spark SQL 提供了多种方式查询 DataFrame,包括临时视图创建、全局视图跨会话访问,支持复杂查询如多表 JOIN、窗口函数、CTE 等。可通过参数化实现动态 SQL 查询,或混合使用 SQL 与 DataFrame API。还能注册 UDF 函数扩展 SQL 功能,实现灵活的数据分析。这些方法让 Spark SQL 既能处理基础查询,也能应对高级分析场景,同时保持代码的可读性和可维护性。

weixin_45422672的博客 304

Spark重要类的源码解析汇总

文章目录1.RDD源码2.sparkContext源码3.MemoryStorage源码4.宽窄依赖源码5.累加器源码6.StoreageLevel 源码7.sparkSession是sparkSQL的入口类8.RDD与dataFram的相互转换8.1 dataFram(1.3 version提出)和dataSet(1.6 version提出)源码8.2 dataFram8.3 dataSet9.sparkSql中的一些特殊类9.1 === 等于是 三个等于号9.2 Dataset 类中有spark Sq

lihuazaizheli的博客 879

Spark1.x和spark2.x的区别

DataFrame与Dataset 统一化了,只剩下DataSet了 flatMapToPair 由reture list变为reture  iterator ForeachRDD 不再return null 更新状态的函数中,使用的Optional来自com.google.common.base,函数不能用 Spark streaming 中JavaStreamingContextFac...

qq_33004309的博客 3565

亿级数据怎么比?DataComPy Spark 分布式后端实战指南

DataComPy 是一款 Python 开源库,用于对比 Pandas、Polars、Spark 和 Snowflake 两种 DataFrame(或表)的差异,并输出人类可读的对比报告。当数据量从百万行飙升到**亿级**时,单机 Pandas 往往会内存溢出,而 DataComPy 的 **Spark 分布式后端** `SparkSQLCompare` 可以让对比任务直接跑在 Spark 集群

gitblog_00318的博客 402

spark-slq

package com.base.spark import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.sql._ import org.apache.spark.sql.hive.HiveContext object Test_03 { def main(...

lovezhaohaimig的博客 186

逻辑表变量名提取:从SQL到Spark的元数据访问与自动化实践

在数据处理与数据工程领域,元数据是描述数据结构、类型和关系的核心概念,它构成了数据治理和自动化流程的基础。元数据的核心价值在于提供数据自描述能力,使系统能够理解数据内容,从而实现动态查询生成、数据质量校验和跨系统集成。从技术原理看,访问元数据通常通过数据库系统表、编程接口或特定API实现,例如SQL的INFORMATION_SCHEMA、Pandas的DataFrame.columns属性或Spark的DataFrame.schema方法。这些技术手段使得自动化脚本能够适应不同数据源,显著提升数据工程效率。

www.itmmd.com 377

【大数据开发】SparkSQL——RDD、DataFrame、DataSet相互转换、DSL常用方法、SQL风格语法、Spark读写操作、获取Column对象的方式

文章目录一、准备工作二、创建SparkSession三、RDD、DataFrame、DataSet之间的相互转换四、 一、准备工作 导入依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>${spark.version}</version> </dependenc

白色风车 463
上一篇: spark dataframe helloworld
下一篇: spark collect driver端操作
dataastron
博客等级 码龄10年 26粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值