<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[csncd的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/csncd</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; csncd]]></copyright><item><title><![CDATA[MySQL笔记1]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/125107860</link><guid>https://blog.youkuaiyun.com/csncd/article/details/125107860</guid><author>csncd</author><pubDate>Thu, 02 Jun 2022 22:33:32 +0800</pubDate><description><![CDATA[在删除时不能对删除操作的表进行其他的操作，也就是你不能使用应该生成一个临时表的形式]]></description><category></category></item><item><title><![CDATA[学习笔记（MySQL巧妙的排序号）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124974887</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124974887</guid><author>csncd</author><pubDate>Wed, 25 May 2022 22:04:30 +0800</pubDate><description><![CDATA[SELECT
 e1.first_name
FROM
 (
 SELECT
  e2.first_name,
  ( SELECT COUNT(*) FROM employees AS e3 WHERE e3.first_name &lt;= e2.first_name ) AS rowid
 FROM
  employees AS e2
 ) AS e1
WHERE
 e1.rowid % 2 = 1;

可以实现对表记录添加...]]></description><category></category></item><item><title><![CDATA[transform和foreachRDD]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124907310</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124907310</guid><author>csncd</author><pubDate>Sun, 22 May 2022 10:10:02 +0800</pubDate><description><![CDATA[transform算子源码：


  /**
   * Return a new DStream in which each RDD is generated by applying a function
   * on each RDD of 'this' DStream.
   * 返回一个新的 DStream，其中每个 RDD 是通过对 'this' DStream 的每个 RDD 应用一个函数来生成的。
   */
  def transform[U: ClassTag](transformFunc]]></description><category></category></item><item><title><![CDATA[笔记（SQL练习）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124904616</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124904616</guid><author>csncd</author><pubDate>Sat, 21 May 2022 22:37:13 +0800</pubDate><description><![CDATA[SELECT 
	a.date, 
	ROUND(COUNT(b.user_id) * 1.0/COUNT(a.user_id), 3) AS p
FROM (
    SELECT 
			user_id, 
			MIN(date) AS date
    FROM login
    GROUP BY user_id) a
LEFT JOIN login b
ON a.user_id = b.user_id
AND b.date = DATE_ADD(a.date,INTERVAL 1 D...]]></description><category></category></item><item><title><![CDATA[superset使用map地图时出现不显示数据的问题]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124559112</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124559112</guid><author>csncd</author><pubDate>Tue, 03 May 2022 18:56:02 +0800</pubDate><description><![CDATA[superset作为一款基于web的免费开源的BI工具，具有强大的可视化数据功能。使用它可以极大的减少了我们进行数据可视化的工作难度。

但是最近学习使用时，发现一个不明问题。在绘制地图时，发现数据以ISO_CODE时发现只显示台湾、香港、澳门地区的数据，而改变使用ISO_CODE_3166_2时其他省份都显示，但是又不显示它三个了。这是个什么鬼情况？？？

因为改变了地区编码方式出现了不同数据情况，那么很显然时编码问题。搜索得到可以查看superset的map地区编码文件


你的superset安装目录]]></description><category></category></item><item><title><![CDATA[spark on yarn提交集群任务出错记录]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124558966</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124558966</guid><author>csncd</author><pubDate>Tue, 03 May 2022 18:10:59 +0800</pubDate><description><![CDATA[最近在spark on yarn模式下提交依赖集群运行的打包程序时总是无法运行。最终发现了自己的一些问题所在记录一下。

首先，由于之前配置hive on spark模式，在系统环境变量上配置过一个spark_home。结果让我无语的是我没使用这个环境变量配置目录下的spark，因为为了锻炼多种模式搭建spark，所以单独搭建了一个spark on yarn的模式，这个目录和环境变量上的是不同的，就导致一直报错寻找不到hadoop_conf_dir，因为环境变量下的spark没有配置相关的支持yarn的信息]]></description><category></category></item><item><title><![CDATA[hive学习小笔记（动态分区）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124354234</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124354234</guid><author>csncd</author><pubDate>Fri, 22 Apr 2022 20:31:56 +0800</pubDate><description><![CDATA[hive分区分为静态分区和动态分区。顾名思义，静态分区需要手动去添加分区信息，而动态分区可根据已有的字段信息来自动实现分区信息。

使用动态分区需要提前开启设置


--设置动态分区
set hive.exec.dynamic.partition=true;
--设置动态分区为非严格模式
set hive.exec.dynamic.partition.mode=nonstrict;

创建一个分区表


create table  if not exists partition_table1(
    na]]></description><category></category></item><item><title><![CDATA[java小笔记（重写equals）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124341256</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124341256</guid><author>csncd</author><pubDate>Fri, 22 Apr 2022 12:01:26 +0800</pubDate><description><![CDATA[为什么重写equals？

因为java类默认的equals是比较内存地址是否一致，那么比较的将是两个对象是否为同一个。但是这并不符合我们现实比较逻辑，就比如判断学生是否为同一个，如果内存中存在两个变量完全一致（学号，姓名等等信息）的两个对象，这在现实逻辑中就是同一个学生，但是如果不重写equals，那么比较的对象在堆中的地址，因为为两个对象所以地址是不同的，就会造成认为这两个同学不是同一个，很显然有问题出现。

重写equals()方法的步骤一般如下：
1、先用“==”判断是否相等。
2、判断equals]]></description><category></category></item><item><title><![CDATA[自定义hive的UDTF函数实现对JSON数组中的JSON对象分离]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124340592</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124340592</guid><author>csncd</author><pubDate>Fri, 22 Apr 2022 11:07:29 +0800</pubDate><description><![CDATA[在我们使用hive进行解析JSON时，虽然有get_json_object函数进行解析，但是功能有限，无法对一个JSON数组进行解析。那么就需要我们自定义一个函数来将数组炸裂开，分成一个个JSON对象去解析。

自定义一个类继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF

重写 initialize，process方法



需要注意的是输出forward必须是一个集合和数组，否则可能会出错。

代码：


package com.royal.hive.]]></description><category></category></item><item><title><![CDATA[时间维度表数据制作（调用API接口）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124301796</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124301796</guid><author>csncd</author><pubDate>Wed, 20 Apr 2022 16:59:13 +0800</pubDate><description><![CDATA[学习电商数仓搭建时，遇到创建DIM层的时间维度表。这里时间维度表数据是十分固定的（一年一更新），要将这些数据提出出来生成文件以便导入DIM层的时间维度表中。

我们可以调用网络上免费的节假日API来实现对数据的整合和统计。

具体代码如下：

这里建议使用第二种getDate2的API，注意使用第二种时需要你自己去申请app_id和app_secret去替换


package com.time;

import com.alibaba.fastjson.JSONArray;
import com.alib]]></description><category></category></item><item><title><![CDATA[练题010]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124257298</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124257298</guid><author>csncd</author><pubDate>Mon, 18 Apr 2022 19:36:31 +0800</pubDate><description><![CDATA[这题的难点在于思考不到如何解决计算方法数，联系不到斐波那契数列，想不到使用动态规划。

主要就在于思路：从后往前看，到达最后一个台阶n有两种方法1、2，如果走1那么前面就有n-1个台阶有f(n-1)个方法，如果走2那么前面就有n-2个台阶就有f(n-2)个方法。那么依次前推就推出了斐波那契数列，f(n) = f(n-1)+f(n-2)。解决斐波那契数列就使用动态规划。

代码：


class Solution {
    public int numWays(int n) {
        // 0..]]></description><category></category></item><item><title><![CDATA[hadoop的分布式缓存DistributedCache]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124254172</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124254172</guid><author>csncd</author><pubDate>Mon, 18 Apr 2022 17:13:31 +0800</pubDate><description><![CDATA[分布式缓存就是：Hadoop为MapReduce框架提供的一种分布式缓存机制，它会将需要缓存的文件分发到各个执行任务的子节点的机器中，各个节点可以自行读取本地文件系统上的数据进行处理。



不同文件类型的添加方法：
job.addArchiveToClassPath(archive); // 缓存jar包到task运行节点的classpath中 
job.addFileToClassPath(file); // 缓存普通文件到task运行节点的classpath中 
job.addCacheArchive]]></description><category></category></item><item><title><![CDATA[MapReduce自定义bean对象实现序列化接口（Writable）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124252412</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124252412</guid><author>csncd</author><pubDate>Mon, 18 Apr 2022 16:26:39 +0800</pubDate><description><![CDATA[实现bean对象序列化步骤如下7步。

（1）必须实现Writable接口

（2）反序列化时，需要反射调用空参构造函数，所以必须有空参构造


public FlowBean() {

    super();

}

（3）重写序列化方法


@Override

public void write(DataOutput out) throws IOException {

    out.writeLong(upFlow);

    out.writeLong(downFlow);

    out]]></description><category></category></item><item><title><![CDATA[练题009]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124216209</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124216209</guid><author>csncd</author><pubDate>Sat, 16 Apr 2022 16:51:06 +0800</pubDate><description><![CDATA[直接简单粗暴的思路，双重for循环遍历查找。

解答前可以单独对特殊情况进行处理，nul、空

代码：


class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {

        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return false;
        }
..]]></description><category></category></item><item><title><![CDATA[练题008]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124172143</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124172143</guid><author>csncd</author><pubDate>Thu, 14 Apr 2022 15:01:12 +0800</pubDate><description><![CDATA[重复就考虑使用去重的容器，set和map，但是set不能得到具体是哪个重复值，所以使用map的key不重复的特性

代码：


class Solution {
    public int search(int[] nums, int target) {
        
        Map&lt;Integer,Integer&gt; n = new HashMap&lt;&gt;();
        for (int i = 0; i &lt; nums.length; i++){
      ]]></description><category></category></item><item><title><![CDATA[练题007]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124171586</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124171586</guid><author>csncd</author><pubDate>Thu, 14 Apr 2022 14:47:17 +0800</pubDate><description><![CDATA[重复的数字，第一反应就是去寻找去重的java容器，这就会考虑到set和map，set直接去重我们时无法得知的，所有这里使用map较好，map的key不能相同。

代码：


class Solution {
    public int findRepeatNumber(int[] nums) {
        Map&lt;Integer,Integer&gt; n = new HashMap&lt;&gt;();

        for (int i = 0; i &lt; nums.leng...]]></description><category></category></item><item><title><![CDATA[练题006]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124141895</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124141895</guid><author>csncd</author><pubDate>Wed, 13 Apr 2022 10:29:32 +0800</pubDate><description><![CDATA[不想复杂，那就是直接遍历进行修改。

需要考虑的是使用字符数组存储还是通过StringBuilder可变字符串来存储新的字符串。

使用字符数组的话，则需要考虑字符数组的初始化长度，空格改为%20由一变三，最坏的情况就是全部需要变，那么就初始化长度为原字符串的3倍长度，这很明显会大量耗损空间内存。

代码：


class Solution {
    public String replaceSpace(String s) {
        char[] c = new char[s.length(..]]></description><category></category></item><item><title><![CDATA[SparkSQL实现对mysql数据库的对接]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124132198</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124132198</guid><author>csncd</author><pubDate>Tue, 12 Apr 2022 19:39:10 +0800</pubDate><description><![CDATA[object JDBC {

    def main(args: Array[String]): Unit = {

        val sparkSession: SparkSession = SparkSession.builder().config(new SparkConf().setMaster("local[*]").setAppName("mysql-jdbc")).getOrCreate()

        // 通用的load读取
        sparkSession.rea.]]></description><category></category></item><item><title><![CDATA[面试题（1~30）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124116960</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124116960</guid><author>csncd</author><pubDate>Tue, 12 Apr 2022 10:04:43 +0800</pubDate><description><![CDATA[1、HashMap 和 Hashtable 区别
2、Java 垃圾回收机制和生命周期
3、怎么解决 Kafka 数据丢失的问题
4、zookeeper 是如何保证数据一致性的
5、hadoop 和 spark 在处理数据时，处理出现内存溢出的方法有哪些？
6、java 实现快速排序
7、设计微信群发红包数据库表结构（包含表名称、字段名称、类型）
8、如何选型：业务场景、性能要求、维护和扩展性、成本、开源活跃度
9、Spark如何调优
10、Flink和spark的通信框架有什么异同
11、Java的代理
]]></description><category></category></item><item><title><![CDATA[面试题（101~130）]]></title><link>https://blog.youkuaiyun.com/csncd/article/details/124116863</link><guid>https://blog.youkuaiyun.com/csncd/article/details/124116863</guid><author>csncd</author><pubDate>Tue, 12 Apr 2022 10:00:44 +0800</pubDate><description><![CDATA[101、Spark：原理、部署、优化

102、Kafka：读写原理、使用、优化

103、hive的外部表

104、spark的函数式编程

105、线性数据结构和数据结构

106、Spark映射，RDD

107、java的内存溢出和内存泄漏

108、多线程的实现方法

109、HashMap、ConcurrentMap和 Hashtable 区别

110、Flink Checkpoint 是怎么做的，作用到算子还是chain

111、Checkpoint失败了的监控

11...]]></description><category></category></item></channel></rss>