大数据(8f)RDD分组求均值

大数据缺失值处理:分布式多重插补技术解析 缺失值处理是数据科学中的基础挑战,尤其在医疗健康等大数据场景下更为突出。多重插补(Multiple Imputation)作为统计学的经典方法,通过构建多个完整数据集来保留数据不确定性,比单一插补更能反映真实数据分布。其技术实现涉及预测建模、随机噪声注入等关键步骤,在Spark分布式计算框架下,通过内存管理优化和并行计算实现了性能突破。这种分布式解决方案特别适用于电子健康记录等大规模数据集,能有效处理高达99%缺失率的变量。实际应用中需注意数据分区策略、内存调优等工程实践细节,在保证计算效率的同时维持插补质 阅读详情

创建名为Hello的Object,导入常用的类

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.rdd.RDD

object Hello {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("a1").setMaster("local[*]")
    val sc = new SparkContext(conf)
  }
}

数据和需求

需求示例:计算下面r1中每种 key 的均值并排序

val s = Seq(("a", 88), ("b", 95), ("a", 91), ("b", 93), ("a", 95), ("b", 98))
val r1 = sc.makeRDD(s, numSlices = 2)

分组求平均

方法1:groupByKey

缺点是可能会数据倾斜

val r2 = r1.groupByKey()
//List((b,CompactBuffer(95, 93, 98)), (a,CompactBuffer(88, 91, 95)))
val r3 = r2.map(a => (a._1, a._2.sum.toDouble / a._2.size))
//List((b,95.33333333333333), (a,91.33333333333333))

方法2:reduceByKey

val r2 = r1.map(a => (a._1, (a._2, 1)))
//List((a,(88,1)), (b,(95,1)), (a,(91,1)), (b,(93,1)), (a,(95,1)), (b,(98,1)))
val r3 = r2.reduceByKey((a, b) => (a._1 + b._1, a._2 + b._2))
//List((b,(286,3)), (a,(274,3)))
val r4 = r3.map { case (k, v) => (k, v._1.toDouble / v._2) }
//List((b,95.33333333333333), (a,91.33333333333333))

方法3:combineByKey

参数说明备注
createCombiner: V => C对每个 Key 创建 Combiner 并对初始化第一个 Value分区内操作
mergeValue: (C, V) => C传入后续的 Value 来迭代 Combiner分区内操作
mergeCombiners: (C, C) => C对同 Key 的 Combiner进行聚合分区间操作

val r2: RDD[(String, (Int, Int))] = r1.combineByKey(
  v => (v, 1),
  (c: (Int, Int), v: Int) => (c._1 + v, c._2 + 1),
  (c1: (Int, Int), c2: (Int, Int)) => (c1._1 + c2._1, c1._2 + c2._2)
)
//List((b,(286,3)), (a,(274,3)))
val r3 = r2.map { case (k, v) => (k, v._1 / v._2.toDouble) }
//List((b,95.33333333333333), (a,91.33333333333333))

排序

按 Key 排序:sortByKey

val r4 = r3.sortByKey()
println(r4.collect.toList)
//List((a,91.33333333333333), (b,95.33333333333333))

自定义(多列)排序:sortByKey

val r4 = r3.sortBy(e => (e._2, e._1), ascending = false)
print(r4.collect.toList)
//List((b,95.33333333333333), (a,91.33333333333333))
【大数据分析】MLlib:线性回归实例 目录分析和准备数据分析数据分布分析列余弦相似性计算协方差矩阵转换为LabeledPoint拆分数据特征缩放和均值归一化拟合和使用线性回归模型 现在使用MLlib的API实现下载房屋数据集,准备数据,拟合线性回归模型,使用模型预测示例目标值的过程。 分析和准备数据 从在线存储库下载房屋数据集(housing.data)(GitHub),并使用以下代码加载数据: val housingLines = sc.textFile("first-edition/ch07/housing.data", 6) val ho 阅读详情

相关推荐

spark学习:org.apache.spark.SparkException: A master URL must be set in your config

Exception in thread “main” org.apache.spark.SparkException: A master URL must be set in your configuration从提示中可以看出找不到程序运行的master,此时需要配置环境变量。 传递给Spark的master url可以有如下几种: local 本地单线程 local[K] 本地多线程(指定

九师兄 9933

org.apache.spark.SparkException: A master URL must be set in your configuration

之前在idea上执行sparkSQL程序时,出现了一个如下Exception: org.apache.spark.SparkException: A master URL must be set in your configuration,说是 没有配置master URL,那我在配置了以后程序就好使了。 需要明确一下,传递给spark的master url可以有如下几种: local 本地单线程...

one111a的博客 5214

Keil 编译输出信息分析:Program size: Code, RO-data , RW-data, ZI-data

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。如图所示,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息。

qq_40305944的博客 4581

SparkException: A master URL必须在配置中设置

当你遇到错误时,这意味着你的Spark应用程序尝试启动时没有找到有效的master URL配置。Master URL是指定Spark集群的主节点地址,它对于初始化SparkContext是必需的。

龙大的博客 2512

程序自动化填写网页表单数据

如何让程序自动化填写网页表单数据,特别是涉及到批量数据情况时,可以减少人力。下面是涉及到的一些场景,都可以通过相关自动化程序实现。

Y 2429

半导体测试(一)

探针台是一种用于在晶圆上进行配合探针卡进行电路量测的设备,在测试过程中,探针工作站会将探针与晶圆上的每个die进行接触,以进行电性测量。在这个过程中,每个die都被测试以确保它能基本满足器件的特征或设计规格书(Specification),通常包括电压、电流、时序和功能的验证。晶圆是一个圆形的硅片,在这个半导体的基础之上,建立了许多独立的单个的电路;在所有的die都被探测(Probed)之后,晶圆被切割成独立的dice,这就是常说的die saw,所有被标示为失效的die都被报废,。

m0_37606066的博客 8435

A master URL must be set in your configuration异常解决:

错误:Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration        at org.apache.spark.SparkContext.<init>(SparkContext.scala:401)原因:创建spark实例,或者sc.textFile读取数据...

gongpulin的博客 1469

单细胞分析避坑指南:SCTransform和Harmony参数设置详解

本文深入解析了单细胞分析中SCTransform标准化与Harmony批次校正的关键参数设置。针对10x Genomics等数据,详细探讨了如何通过调整`vars.to.regress`、`theta`等核心参数,在有效去除技术噪音的同时,避免过度校正以保留关键的生物学差异,从而提升分析结果的可靠性与可解释性。

weixin_29053073的博客 612

Scala pair RDD 统计均值,方差等

val conf = new SparkConf().setAppName("hh") conf.setMaster("local[3]") val sc = new SparkContext(conf)val data = sc.textFile("/home/hadoop4/Desktop/i.txt") .map(_.split("\t")).map(f => f.map(

power0405hf的专栏 1万+

别再让信号‘撞墙’了!手把手教你用嘉立创阻抗计算器搞定PCB高速线(附免费压层结构选择)

本文详细介绍了如何使用嘉立创阻抗计算器解决PCB高速线设计中的阻抗匹配问题,避免信号反射和传输损耗。通过免费压层结构选择和五步计算法,帮助工程师快速掌握USB3.0差分线等高速信号的设计技巧,提升PCB设计效率和信号质量。

weixin_30736301的博客 282

【嵌入式Linux】EC20模块多运营商自适应PPP拨号实战:从IMSI识别到网络配置

本文详细介绍了在嵌入式Linux系统中,如何基于EC20 4G模块实现多运营商自适应PPP拨号。通过解析SIM卡的IMSI识别运营商,并动态配置对应的APN和拨号参数,结合AT指令交互与健壮的pppd脚本,解决了设备跨地域部署时的网络自动连接问题,提升了物联网设备的部署效率和稳定性。

fox11的博客 904

pyspark 对RDD的相关api

1、aggregate,可以用来求平均值 如下示例 rdd2 = spark.sparkContext.parallelize([1,2,3,4,5,6,7,8,9,10]) seqop = (lambda x,y: (x[0]+ y, x[1]+ 1)) #0+1 0+1 1+2 1+1 3+3 2+1 cpmop= (lambda x,y: (x[0]+ y[0],...

maketubu7的博客 1572

基于C#的工业机器人上位机控制程序开发(搭配松下PLC+MC协议)

基于C#的工业机器人上位机控制程序开发,核心是上位机与松下PLC的MC协议通信和机器人控制的安全逻辑,而不是单纯的界面编写。在工控现场,程序的稳定性和安全性永远是第一位的——比如解耦通信逻辑、处理跨线程问题、添加安全互锁、记录操作日志,这些都是保证产线稳定运行的关键。新手在学习时,建议先跟着步骤搭建好环境,跑通基础的PLC通信和机器人控制功能,再逐步尝试进阶优化。数据模型化、通信封装化、逻辑模块化、UI解耦化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1244

大数据编程实验三:Spark SQL

(2)配置Spark通过JDBC连接数据库MySQL,编程实现利用DataFrame插入如表5-3所示的两行数据到MySQL中,最后打印出age的最大值和age的总和。(1)在MySQL数据库中新建数据库sparktest,再创建表employee,包含如表5-2所示的两行数据。将下列JSON格式数据复制到Linux系统中,并保存命名为employee.json。(列出遇到的问题和解决办法,列出没有解决的问题;写下本次实验的体会和感受)3、熟悉利用Spark SQL管理来自不同数据源的数据。

m0_64642912的博客 2060

DRM遇到的实际问题及领悟(3)

DRM遇到的实际问题及领悟(3)

phmatthaus的专栏 639

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spark 应用场景1-求年龄平均值

原文引自:http://blog.youkuaiyun.com/fengzhimohan/article/details/78535143   该案例中,我们将假设我们需要统计一个 10 万人口的所有人的平均年龄,当然如果您想测试 Spark 对于大数据的处理能力,您可以把人口数放的更大,比如 1 亿人口,当然这个取决于测试所用集群的存储容量。假设这些年龄信息都存储在一个文件里,并且该文件的格式如下,第一列...

weixin_30267691的博客 256

深度学习工具包 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")

spark: rdd的应用(scala api)

wordcount: 统计词频, 排序 历年温度最值: max, min, avg //word.txt var file=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;/home/wang/txt/word.txt&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot; //a b c e f e f import org.apache.spark.rdd.RDD v

eyeofeagle的博客 695

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spark简单编程与相关简单函数使用

Spark简单编程与函数:mapValues(func);reduceByKey(func);groupByKey()

lxin690的博客 640

RDD编程初级实践

请根据给定的实验数据Data01.txt,在spark-shell中通过编程来计算以下内容 首先使用xftp将Data01.txt(某大学计算机系的成绩数据集)上传至master节点的/opt目录下 所有节点使用hadoop用户登录 su hadoop //切换hadoop用户 在master节点上分别启动hadoop集群和spark集群 /opt/hadoop/sbin/start-all.s...

Jop_qq的博客 6725

PySpark岭回归实战:大数据场景下的线性模型调优与避坑指南

线性回归是机器学习中最基础且广泛应用的预测模型,其核心原理是通过最小化预测值与真实值之间的误差平方和,来拟合特征与目标变量之间的线性关系。在数据维度较高或特征间存在相关性时,模型容易出现过拟合和共线性问题,此时引入正则化技术成为关键。岭回归(L2正则化)通过在损失函数中加入权重平方和作为惩罚项,有效约束模型复杂度,提升解的稳定性和泛化能力,尤其适用于特征工程充分、特征可能均存在贡献的场景。从技术价值看,正则化处理是提升模型鲁棒性的标准实践,而结合Spark的分布式计算框架,如PySpark MLlib,能够

weixin_33911824的博客 383

国赛大数据离线处理:指标计算的工程化实战指南

离线数据处理是大数据开发的核心基础能力,本质是将原始杂乱数据通过清洗、建模与聚合,转化为可支撑业务决策的准确指标。其技术原理涵盖Spark SQL执行优化、宽表预计算设计、窗口函数与比率计算范式等关键机制,技术价值在于提升计算准确性、资源利用率与交付鲁棒性。典型应用场景包括职业院校技能大赛备赛、企业级ETL任务开发及业务分析师的数据链路构建。本文聚焦‘指标计算’与‘离线数据处理’两大核心热词,结合国赛真实约束(如4核8G集群、数据脏乱、限时交付),系统拆解从脏数据到可信指标的全流程工程实践。

weixin_30698527的博客 262

大数据开发工程师笔试题

不要坑自己啊,老铁们

想练武,就得下功夫 5371

字节跳动大数据校招真题复盘:从Java并发到分布式链路考点解析

大数据技术已成为企业构建数据链路的核心,其底层依赖分布式存储与计算框架,如Hadoop与Spark。理解Java并发原理、HDFS写入流程、Shuffle机制及数据质量保障,是开展大数据开发的基本功。在面试与工程实践中,掌握这些原理有助于应对数据倾斜、任务OOM等实际问题。本文基于字节跳动大数据校招真题,梳理高频考点,从备考者视角拆解Java并发、Hadoop生态、分布式理论等模块,帮助读者建立系统的能力地图,为大数据岗位笔试与面试提供参考。

weixin_34161064的博客 375

spark笔记二

数据 1 16 2 74 3 51 4 35 5 44 6 95 7 5 8 29 10 60 11 13 12 99 13 7 14 26 求平均值 package cn.tedu.average import org.apache.spark.SparkConf import org.apache.spark.SparkContext object Driver { def main(args...

weixin_44617428的博客 144

pyspark常用的基本操作

一.通过外部数据创建RDD # 1.通过本地数据创建RDD # 准备本地文件 cat myspark.txt >hello my name is Cocktail_py >welcome to my blogs # pyspark shell rdd = sc.textFile("file:////root/myspark.txt") rdd.collect() >['hel...

Cocktail_py的博客 765
上一篇: 大数据(8k)结构化数据处理SparkSQL
下一篇: 机器学习模型在线更新【多线程+线程锁】实现
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值