Day07Spark多语言开发

article/2025/10/3 14:51:25

Spark多语言开发

学习目标

1.掌握使用Java语言开发Spark程序

2.了解线性回归算法案例

3.了解使用Python语言开发Spark程序

4.了解决策树分类算法案例

 

1.  JavaSpark

1.1  编程语言说明

Spark 在诞生之初就提供了多种编程语言接口:Scala、Java、Python 和 SQL,在后面的版本中又加入了 R 语言编程接口。

对于 Spark 来说,虽然其内核是由 Scala 编写而成,但编程语言从来就不是它的重点,从 Spark 提供这么多的编程接口来说,Spark 鼓励不同背景的人去使用它完成自己的数据探索工作。尽管如此,不同编程语言在开发效率、执行效率等方面还是有些不同,对比如下:

 

ü Scala 作为 Spark源码 的开发语言当然得到了原生支持,也非常成熟,它简洁的语法也能显著提高开发效率;

ü Java 也是 Spark 原生支持的开发语言,但是1.7之前 Java 语法冗长且不支持函数式编程,导致它的 API 设计得冗余且不合理,1.8 以后开始支持函数式编程,且Java语言规范性好,应用范围广,用户基数大,所以Java API 也是一个很好的选择;

ü Python 与 R 语言都是解释型脚本语言,可以直接解释执行,不用编译。尤其是 Python 更以简洁著称,开发效率自不必说,此外 Python 与 R 语言本身也支持函数式编程,这两种语言在开发 Spark 作业时也是非常自然,但由于其执行原理是计算任务在每个节点安装的 Python 或 R 的环境中执行,结果通过管道输出给JVM,所以效率要比 Scala 与 Java 低;

ü SQL 是 Spark 原生支持的开发语言,从各个维度上来说都是最优的,所以一般情况下,用 Spark SQL 解决问题是最优选择。

★注意 1:

这里要特别说明的是,Spark 是由 Scala 开发而成,对于Java、Scala 编程接口来说,在执行计算任务时,是由集群中每个节点的 JVM(Scala 也是 JVM 语言)完成。

但是如果采用 Python、R 语言编程接口,那么执行过程是由集群中每个节点的 Python 与 R 进程计算并通过管道回传给 JVM,所以性能上会有所损失。具体来说:PySpark是借助Py4j实现Python调用Java,来驱动Spark应用程序,本质上主要还是JVM runtime。在大数据场景下,JVM和Python进程间频繁的数据通信导致其性能损耗较多,恶劣时还可能会直接卡死,所以建议对于大规模机器学习或者Streaming应用场景还是慎用PySpark,应该尽量使用原生的Scala/Java编写应用程序,对于中小规模数据量下的简单离线任务,可以使用PySpark快速部署提交。

★注意 2:

此外,通过GitHub上Spark相关项目的使用语言上来看,也是Scala使用的最多,所以课程中使用Scala语言为主,但会扩展讲解使用其他语言进行Spark开发

https://github.com/search?q=spark

 

1.2  SparkCore

package cn.itcast.hello;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import scala.Tuple2;import java.util.Arrays;import java.util.List;public class SparkCoreDemo {    public static void main(String[] args) {        //1.创建sc        SparkConf conf = new SparkConf().setAppName("wc").setMaster("local[*]");        JavaSparkContext jsc = new JavaSparkContext(conf);        jsc.setLogLevel("WARN");        //2.读取文件        JavaRDD<String> fileRDD = jsc.textFile("data/input/words.txt");        //3.处理数据        //3.1每一行按照" "切割        /*        java8中的函数格式: (参数列表)->{函数体;}  注意:原则也是能省则省        public interface FlatMapFunction<T, R> extends Serializable {          Iterator<R> call(T t) throws Exception;        }        */        //通过查看源码,我们发现,flatMap中需要的函数的参数是T(就是String)        //返回值是Iterator        //所以我们在函数体里面要返回Iterator        JavaRDD<String> wordRDD = fileRDD.flatMap(line -> Arrays.asList(line.split(" ")).iterator());        //3.2每个单词记为1 (word,1)       /*       public interface PairFunction<T, K, V> extends Serializable {          Tuple2<K, V> call(T t) throws Exception;        }        */        JavaPairRDD<String, Integer> wordAndOneRDD = wordRDD.mapToPair(word -> new Tuple2<>(word, 1));        //3.3按照key进行聚合       /*       public interface Function2<T1, T2, R> extends Serializable {          R call(T1 v1, T2 v2) throws Exception;        }        */        JavaPairRDD<String, Integer> wrodAndCountRDD = wordAndOneRDD.reduceByKey((a, b) -> a + b);        //4.收集结果并输出        List<Tuple2<String, Integer>> result = wrodAndCountRDD.collect();        //result.forEach(t->System.out.println(t));        result.forEach(System.out::println);        //函数式编程的思想:行为参数化

        //5.关闭        jsc.stop();    }}

1.3  SparkStreaming

package cn.itcast.streaming;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.streaming.Durations;import org.apache.spark.streaming.api.java.JavaPairDStream;import org.apache.spark.streaming.api.java.JavaReceiverInputDStream;import org.apache.spark.streaming.api.java.JavaStreamingContext;import scala.Tuple2;import java.util.Arrays;/** * Author itcast */public class SparkStreamingDemo {    public static void main(String[] args) throws Exception {        SparkConf sparkConf = new SparkConf().setAppName("wc").setMaster("local[*]");        JavaSparkContext jsc = new JavaSparkContext(sparkConf);        JavaStreamingContext ssc = new JavaStreamingContext(jsc, Durations.seconds(5));        jsc.setLogLevel("WARN");        JavaReceiverInputDStream<String> socketDStream = ssc.socketTextStream("node1",9999);        JavaPairDStream<String, Integer> result = socketDStream                .flatMap(line -> Arrays.asList(line.split(" ")).iterator())                .mapToPair(word -> new Tuple2<>(word, 1))                .reduceByKey((a, b) -> a + b);        result.print();        ssc.start();        ssc.awaitTermination();    }}

1.4  SparkSQL

package cn.itcast.sql;import org.apache.spark.SparkContext;import org.apache.spark.sql.Dataset;import org.apache.spark.sql.Encoders;import org.apache.spark.sql.Row;import org.apache.spark.sql.SparkSession;import java.util.Arrays;/** * Author itcast */public class SparkSQLDemo {    public static void main(String[] args) {        SparkSession spark = SparkSession                .builder()                .appName("SparkSQL")                .master("local[*]")                .getOrCreate();        SparkContext sc = spark.sparkContext();        sc.setLogLevel("WARN");        Dataset<String> ds = spark.read().textFile("data/input/words.txt");        ds.printSchema();        ds.show();        Dataset<String> wordDS = ds.flatMap((String line) -> Arrays.asList(line.split(" ")).iterator(), Encoders.STRING());        wordDS.printSchema();        wordDS.show();        //SQL        wordDS.createOrReplaceTempView("t_words");        String sql = "select value as word,count(*) as counts\n" +                "        from t_words\n" +                "        group by word\n" +                "        order by counts desc";        spark.sql(sql).show(false);        //DSL        Dataset<Row> tempDS = wordDS.groupBy("value")                .count();//.show(false);        tempDS.orderBy(tempDS.col("count").desc())                .show(false);    }}

1.5  StructuredStreaming

package cn.itcast.structedstream;import org.apache.spark.SparkContext;import org.apache.spark.sql.Dataset;import org.apache.spark.sql.Encoders;import org.apache.spark.sql.Row;import org.apache.spark.sql.SparkSession;import java.util.Arrays;/** * Author itcast */public class StructuredStreamingDemo {    public static void main(String[] args) throws Exception {        SparkSession spark = SparkSession                .builder()                .appName("SparkSQL")                .master("local[*]")                .config("spark.sql.shuffle.partitions", "4")                .getOrCreate();        SparkContext sc = spark.sparkContext();        sc.setLogLevel("WARN");        Dataset<Row> lines = spark                .readStream()                .format("socket")                .option("host", "node1")                .option("port", 9999)                .load();        Dataset<Row> result = lines.as(Encoders.STRING())                .flatMap((String line) -> Arrays.asList(line.split(" ")).iterator(), Encoders.STRING())                .groupBy("value")                .count();        result.writeStream()                .outputMode("complete")                .format("console")                .start()                .awaitTermination();    }}

1.6  线性回归算法-房价预测案例

1.6.1  需求

根据房屋面积和房屋价格历史数据, 预测新给定房屋面积的价格

 

1.6.2  实现思路

l 找规律/模型/函数

可以将这些数据放到二维坐标系中,进行描点

 

通过观察可以发现, x轴/横轴 面积和y轴/纵轴 价格 呈现出一个一元一次线性关系,(当然也可以用更复杂的如一元二次描述)

 

那这个一元一次线性关系,就是红色的那条直线可以用如下方程表示:

y = ax + b

y就是y轴/纵轴,也就是价格

x就是x轴/横轴,也就是面积

l 做预测

既然这样,我们就可以使用该直线: y = ax + b 来拟合这些点,

那么现在的问题就是如何求出a和b?

也就是说如果知道a和b的值, 就可以很方便的根据x(面积),求出y(价格)

也就是可以预测房屋的价格

1.6.3  算法原理

上面的给数据+找规律+做预测 就是机器学习的一个最简单的步骤, 但是其中

找规律和做预测的步骤中需要使用数学工具对a和b的值进行计算! 这样才能完成最终的需求

a和b的值如何确定? 如何寻找?

我们可以尝试使用最优化思想来解决这个问题!

因为a和b的取值有很多种,不能说哪一组a和b的值是正确的,只能说哪一组的a和b的值是最优的

可以定义如下规则:

房屋的真实价格: y'

房屋的预测价格:y''

误差Δy = (y'' - y')^2

总误差: sum((y'' - y')^2)

均方误差: sum((y'' - y')^2)/n

如果找到一组a和b能够让均方误差最小(较小),那么就可以可以说该组a和b 为最优(较优)

因为该a和b的取值可以让所有数据的均方误差最小! 也就是预测值和真实值越接近的!!!

也就是在该组a和b的取值下, y=ax+b对房价的预测的越准确!

那么问题就变成了求如下函数在a和b等于多少的时候有的最小值

 

l 关于公式推断感兴趣可以去阅读如下链接

对于我们只需要知道, 如上的房价预测案例最后会变成一个数学(最优化)问题!

而数学问题的求解程序已经封装好了, 我们后续直接调用即可

当然如果数学水平还可以的同学可以阅读一些课外资料

https://www.zhihu.com/question/37031188/answer/1301921009

https://baijiahao.baidu.com/s?id=1639202882632470513&wfr=spider&for=pc

https://blog.csdn.net/alw_123/article/details/82193535

https://blog.csdn.net/alw_123/article/details/82825785

https://blog.csdn.net/alw_123/article/details/83065764

1.6.4  代码实现

package cn.itcast.exercise;import org.apache.spark.SparkContext;import org.apache.spark.ml.evaluation.RegressionEvaluator;import org.apache.spark.ml.feature.VectorAssembler;import org.apache.spark.ml.regression.LinearRegression;import org.apache.spark.ml.regression.LinearRegressionModel;import org.apache.spark.sql.Dataset;import org.apache.spark.sql.Row;import org.apache.spark.sql.SparkSession;/** * Author itcast * Desc */public class HousePriceDemo {    public static void main(String[] args) {        SparkSession spark = SparkSession                .builder()                .appName("SparkSQL")                .master("local[*]")                .config("spark.sql.shuffle.partitions", "4")                .getOrCreate();        SparkContext sc = spark.sparkContext();        sc.setLogLevel("WARN");        Dataset<Row> fileDS = spark.read()                .format("csv")                .option("sep", "|")                .option("header", "true")                .option("inferSchema", "true")                .load("data/input/homeprice.data");        fileDS.show(true);        fileDS.printSchema();        //|房屋编号mlsNum|城市city|平方英尺|卧室数bedrooms|卫生间数bathrooms|车库garage|年龄age|房屋占地面积acres|房屋价格price        Dataset<Row> homeDS = fileDS.select("sqFt", "age", "acres", "price");        //Dataset<Row> homeDS = fileDS.select("city", "sqFt", "age", "acres", "price");        homeDS.show(true);        homeDS.printSchema();        /*Dataset<Row> indexDS = new StringIndexer()                .setInputCol("city")                .setOutputCol("index_city")                .fit(homeDS)                .transform(homeDS);        Dataset<Row> oneHotResultDS = new OneHotEncoder()                .setInputCol("index_city")                .setOutputCol("onehot_city")                .fit(indexDS).transform(indexDS);        oneHotResultDS.show(true);        oneHotResultDS.printSchema();*/        Dataset<Row> VectorDF = new VectorAssembler()                .setInputCols(new String[]{"sqFt", "age", "acres"})                //.setInputCols(new String[]{"onehot_city", "sqFt", "age", "acres"})                .setOutputCol("features")                //.transform(oneHotResultDS);                .transform(homeDS);        VectorDF.show(true);        VectorDF.printSchema();        Dataset<Row>[] splits = VectorDF.randomSplit(new double[]{0.8, 0.2}, 100);        Dataset<Row> trainSet = splits[0];        Dataset<Row> testSet = splits[1];        LinearRegressionModel model = new LinearRegression().setStandardization(true).setMaxIter(10)                .setFeaturesCol("features")                .setLabelCol("price")                .setPredictionCol("predict_price")                .fit(trainSet);        Dataset<Row> result = model.transform(testSet);        result.show(true);        RegressionEvaluator evaluator = new RegressionEvaluator()                .setMetricName("rmse") //均方根误差                .setLabelCol("price")                .setPredictionCol("predict_price");        Double rmse = evaluator.evaluate(result); //均方根误差: (sum((y-y')^2)/n)^0.5        System.out.println("rmse为:" + rmse);        //rmse:65078.804057320325        //rmse:86463.42504994274    }}

2.  PySpark

2.1  SparkCore

from pyspark import SparkContextif __name__ == "__main__":    sc = SparkContext(appName="wc",master="local[*]")    text_file = sc.textFile("data/words.txt")    counts = text_file.flatMap(lambda line: line.split(" ")) \        .map(lambda word: (word, 1)) \        .reduceByKey(lambda a, b: a + b)    result = counts.collect()    for (word, count) in result:        print("%s: %i" % (word, count))    sc.stop()

2.2  SparkStreaming

from pyspark import SparkContextfrom pyspark.streaming import StreamingContextif __name__ == "__main__":    sc = SparkContext(appName="wc",master="local[2]")    ssc = StreamingContext(sc, 5)    lines = ssc.socketTextStream("node1", 9999)    result = lines.flatMap(lambda line: line.split(" "))\                  .map(lambda word: (word, 1))\                  .reduceByKey(lambda a, b: a+b)    result.pprint()    ssc.start()    ssc.awaitTermination()

2.3  SparkSQL

from pyspark.sql import SparkSessionfrom pyspark.sql import Rowdef wordcount(spark):    sc = spark.sparkContext    text_file = sc.textFile("data/words.txt")    words = text_file.flatMap(lambda line: line.split(" ")).map(lambda word: Row(value=word))    df = spark.createDataFrame(words)    df.show()    df.printSchema()    df.groupBy("value").count().show()def basic_query(spark):    df = spark.read.json("data/people.json")    df.show()    # +----+-------+    # | age|   name|    # +----+-------+    # |null|Michael|    # |  30|   Andy|    # |  19| Justin|    # +----+-------+    df.printSchema()    # root    # |-- age: long (nullable = true)    # |-- name: string (nullable = true)    df.select("name").show()    # +-------+    # |   name|    # +-------+    # |Michael|    # |   Andy|    # | Justin|    # +-------+    df.select(df['name'], df['age'] + 1).show()    # +-------+---------+    # |   name|(age + 1)|    # +-------+---------+    # |Michael|     null|    # |   Andy|       31|    # | Justin|       20|    # +-------+---------+    df.filter(df['age'] > 21).show()    # +---+----+    # |age|name|    # +---+----+    # | 30|Andy|    # +---+----+    df.groupBy("age").count().show()    # +----+-----+    # | age|count|    # +----+-----+    # |  19|    1|    # |null|    1|    # |  30|    1|    # +----+-----+    df.createOrReplaceTempView("people")    sqlDF = spark.sql("SELECT * FROM people")    sqlDF.show()    # +----+-------+    # | age|   name|    # +----+-------+    # |null|Michael|    # |  30|   Andy|    # |  19| Justin|    # +----+-------+if __name__ == "__main__":    spark = SparkSession\        .builder \        .appName("wc") \        .master("local[*]") \        .getOrCreate()    wordcount(spark)    basic_query(spark)    spark.stop()

2.4  StructuredStreaming

from pyspark.sql import SparkSessionfrom pyspark.sql.functions import explodefrom pyspark.sql.functions import splitif __name__ == "__main__":    spark = SparkSession\        .builder\        .appName("wc")\        .master("local[*]") \        .config("spark.sql.shuffle.partitions", "2")\        .getOrCreate()    lines = spark \        .readStream \        .format('socket') \        .option('host', "node1") \        .option('port', 9999) \        .load()    words = lines.select(        explode(            split(lines.value, ' ')        ).alias('word')    )    result = words.groupBy('word').count()    result\        .writeStream\        .outputMode('complete')\        .format('console')\        .start()\        .awaitTermination()

2.5  决策树分类算法-相亲决策案例

2.5.1  需求

现假设一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

女儿:多大年纪了?

母亲:26。

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是程序员不?

母亲:是,在黑马学习大数据呢,毕业了就是程序员了!

女儿:那好,我去见见。

 

 

l 数据

字段说明:

是否见面, 年龄  是否帅  收入(2 高 1 中等 0 少)  是否是程序员

label,age,handsome,salary,programmer不见面,32,1,2,0不见面,25,1,1,0见面,29,1,1,1见面,24,1,2,0不见面,31,1,2,0见面,35,1,1,1不见面,30,0,2,0不见面,31,1,2,0见面,30,1,1,1见面,21,1,2,0不见面,21,1,1,0见面,21,1,1,1不见面,29,0,1,1不见面,29,1,0,1不见面,29,0,1,1见面,30,1,2,0不见面,32,1,1,0见面,27,1,2,1见面,29,1,2,0见面,25,1,1,1不见面,23,0,1,1

2.5.2  算法原理

 

 

 

 

 

 

 

 

 

 

 

 

 

2.5.3  代码实现

from pyspark.ml import Pipelinefrom pyspark.ml.classification import DecisionTreeClassifierfrom pyspark.ml.feature import StringIndexer, VectorAssembler, IndexToStringfrom pyspark.ml.evaluation import MulticlassClassificationEvaluatorfrom pyspark.sql import SparkSessionif __name__ == "__main__":    spark = SparkSession \        .builder \        .appName("pyspark") \        .master("local[*]") \        .config("spark.sql.shuffle.partitions", "2") \        .getOrCreate()    data = spark.read.format("csv") \        .option("sep", ",") \        .option("header", "true") \        .option("inferSchema", "true") \        .load("data/appointment.data")    data.show()    data.printSchema()    # 标签数值化    stringIndexer = StringIndexer() \        .setInputCol("label") \        .setOutputCol("label_Indexer")    stringIndexerModel = stringIndexer.fit(data)    # 特征向量化    vectorAssembler = VectorAssembler() \        .setInputCols(["age", "handsome", "salary", "programmer"]) \        .setOutputCol("features")    decisionTreeClassifier = DecisionTreeClassifier() \        .setFeaturesCol("features") \        .setLabelCol("label_Indexer") \        .setPredictionCol("predict_Indexer") \        .setImpurity("gini") \        .setMaxDepth(5)    # 还原标签列(预测的是数字,要还原成字符串)    indexToString = IndexToString()\        .setInputCol("predict_Indexer")\        .setOutputCol("predict_String")\        .setLabels(stringIndexerModel.labels)    # 划分数据集    (trainSet, testSet) = data.randomSplit(weights=[0.8,0.2],seed=100)    # 构建pipeline    Pipeline = Pipeline().setStages([stringIndexerModel, vectorAssembler, decisionTreeClassifier, indexToString])    # 训练模型    model = Pipeline.fit(trainSet)    # 进行预测    predictions = model.transform(testSet)    predictions.show()    # 模型评估    evaluator = MulticlassClassificationEvaluator(labelCol="label_Indexer", predictionCol="predict_Indexer", metricName="accuracy")    accuracy = evaluator.evaluate(predictions)    print("测试集错误率为: %f" % (1.0 - accuracy))    # 查看模型决策过程    print("模型决策过程为: \n %s" % model.stages[2].toDebugString)


http://chatgpt.dhexx.cn/article/Bqh02F6W.shtml

相关文章

cocos creator jsc 逆向解码为js

cocos creator 下的jsc cocos creator 编译之后的所生成的jsc文件&#xff0c;虽然后缀是jsc,但其实和js虚拟机所执行的字节码(jsc)是二个不同的东西&#xff0c;只是使用xxtea对js文件进行加密而已。xxtea是可逆的&#xff0c;所以cocos creator下的jsc是完全可逆的&#xff…

Cocos2dx-js 资源.jsc和.pkm反编译

.jsc 解密 1. 找到apk里面的libcocos2djs.so. 用编辑器utf-b模式打开 2. 搜索Cocos Game 紧接着的 220404db-d3df-4b 就是密码 3. 使用工具decrypt.exe 即可解密 下载地址:https://download.csdn.net/download/liutietuo/86511410 cocos creator script decrypt version 1.0…

jsc 解码窥探

先使用 JS_DecodeScript反编译jsc 得到AST树 AST树词法解析 http://esprima.org/ AST还原成源码&#xff1a; npm install escodegen AST树遍历&#xff1a;npm install estraverse https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Byte…

cocos2d-js中jsc逆向为js

1.mac系统 2.安装php7以上的版本 ubuntu $ sudo apt install php7.0 mac $ brew install php7.0 windows just google an binary one 查看php安装的版本这里mac电脑为例子: 输入:php -v 只要7以上的版本即可 3.cd到自己的项目位置 cd path/to/project 安装composer,…

如何设置input默认值

之前聊过input最大字数限制&#xff0c;今天看下如何设置输入框默认值 placeholder属性 如下&#xff1a; <input type"text" maxlength"11" placeholder"名字"/> 输入框展示效果如下&#xff1a;

input标签点击移除默认值

使用onfocus事件检查当前输入框内的值,如果是默认得值,就将value属性置空. <input type"text" value"请输入内容" onfocus"javascript:if(this.value请输入内容)this.value;"> 操作之前: 操作之后:

Python input输入超时选择默认值自动跳过

Python input输入超时选择默认值自动跳过 Python input 等待键盘输入&#xff0c;超时选择默认值&#xff0c;释放input&#xff0c;之后重新进入等待键盘输入状态&#xff0c;直到用户输入可用数据。 一、调用 func_timeout 模块实现超时控制 1、安装 func_timeout 库 pip…

html文本框设置默认值,HTML input文本框设置和移除默认值

这里想实现的效果是&#xff1a;设置和移除文本框默认值&#xff0c;如下图鼠标放到文本框中的时候&#xff0c;灰字消失。 1.可以用简单的方式&#xff0c;就是给input文本框加上onfocus属性&#xff0c;如下代码&#xff1a; οnfοcusif(this.value"请输入关键字进行搜…

使用js代码修改input的默认值

内容&#xff1a;使用js代码来对input设置的默认值进行修改&#xff0c;点击按钮修改input的默认值 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><scrip…

html设置input默认值,使用jQuery给input标签设置默认值

由于项目需求&#xff0c;简单地写了一个input默认值设置&#xff0c;实现给.form中所有的input设置默认值的方法。input默认值设置 $(function() { //集体调用 $(".form input").each(function(){ $(this).setDefauleValue(); }); //单个调用 $("#key").s…

antd 给input设置值_Antd 中 Input 组件默认值的显示

1、input标签中有placeholder可以显示默认值 但是有少量样式的问题(字体颜色会淡一点) placeholder属性 2、用Input组件中的defaultValue属性 defaultValue属性 3、form表单组件中的initialValue参数 注意&#xff1a;当Form组件和Input组件一起用时&#xff0c;defaultValue在…

Ant Design React中 Form.Item 中设置Select,Input.TextArea,Input默认值

<Formref{this.formRef}name"dynamic_rule"initialValues{{ one: 0, two: 0, three: "0", desc:"尝试一下" }}></Form>在Form 使用initialValues{{ name:"value" }}>

踩坑 antd Form表单获取input默认值失败,Form表单校验input 必填 默认值为undefined

问题描述&#xff1a;1&#xff0c;跳转页面后&#xff0c;通过url传参&#xff0c;将参数自动回填到下一个页面的input输入框里&#xff0c;打开页面后&#xff0c;input成功显示回写内容。2&#xff0c;为FormItem添加必填校验required:true。3&#xff0c;提交表单&#xff…

js压缩混淆加密工具,解密工具

js压缩混淆加密有什么不同 压缩 compress&#xff1a; 去掉空格&#xff0c;换行&#xff0c;注释等&#xff0c;格式紧凑&#xff0c;节约存储空间。 混淆 obfuscate/garble&#xff1a;替换变量名或方法名&#xff0c;让js不容易看懂。也做到了压缩的效果。 加密 encrypt&…

对JS文件中每个函数单独混淆加密

自动化脚本&#xff1a;单独对JS代码中的每个函数进行混淆加密 用自动化脚本工具&#xff0c;对JS代码中的每个函数分别进行单独混淆加密。这样加密得到的JS代码&#xff0c;比直接对整个JS代码进行混淆加密&#xff0c;效果要好很多。所谓“好”体现在&#xff1a;加密结果安…

js常见混淆加密技术

下面&#xff0c;我将通过一个案例来演示如何使用JavaScript混淆加密技术来保护你的网站。 假设你有一个网站&#xff0c;其中包含一个登录页面&#xff0c;该页面的JavaScript代码如下所示&#xff1a; function login(username, password) {if (username "admin"…

JS混淆原理

JS混淆原理 •eval 加密 通过eval去执行函数通常和webpack打包拼接一起使用• 变量混淆 ​ 变量名混淆&#xff0c;十六进制替换&#xff0c;随机字符串替换• 属性加密 ​ 一套组合算法&#xff0c;将属性加密生成• 控制流平坦化 逻辑处理块统一加上前驱逻辑块&#xff0c…

在线Javascript加密混淆工具

在线Javascript加密混淆工具 在线Javascript加密混淆工具 在线Javascript Obfuscator 使 javascript 代码更难阅读以保护它。该工具提供了四种使用工具。你可以压缩或格式化你的代码&#xff0c;也可以使用 eval 混淆你的代码并对其进行解码。混淆的 javascript 代码在你的工作…

JavaScript代码混淆加密教程 JS无解加密

正文: 今天给大家写一篇原创JS加密教程&#xff0c;大家都知道由于JS属于前端的内容&#xff0c;任何人都可以直接对代码进行查看&#xff0c;直接暴漏JS代码&#xff0c;自己的劳动成果无法保护就算了&#xff0c;别人还可以直接复制你的代码变为自己的。 所以说&#xff0c…

Js混淆代码、加密数据工具-JShaman

官网&#xff1a;JShaman - 专业的JS代码混淆加密平台 - JS混淆、JS加密 由于客户信息安全检测到系统源码没有加密&#xff0c;容易被仿造&#xff0c;故建议对重要js文件进行加密。