十二、Hive 函數

作者:IvanCodes
日期:2025年5月1日
專欄:Hive教程

數據處理廣闊天地中,我們常常需要對數據進行轉換、計算、清洗提取特定信息。Hive 提供了強大內置運算符豐富的內置函數庫,它們就像魔法師手中的魔法棒,能幫助我們靈活高效操控數據挖掘深層價值

思維導圖

在這里插入圖片描述
在這里插入圖片描述

一、Hive 內置運算符概覽

深入函數之前,我們先快速回顧一下 Hive 支持的常見內置運算符,這些是構成表達式基本組件

  1. 算術運算符+, -, *, /, %, DIV
  2. 關系運算符=, <>, !=, <, >, <=, >=, IS NULL, IS NOT NULL, BETWEEN, IN, NOT IN, LIKE, RLIKE, REGEXP
  3. 邏輯運算符AND ( && ), OR ( || ), NOT ( ! )
  4. 位運算符&, |, ^, ~
  5. 復雜類型構造器MAP(), STRUCT(), ARRAY(), NAMED_STRUCT()
  6. 復雜類型訪問運算符A[key], A.col

二、Hive 內置函數詳解

我們可以通過 SHOW FUNCTIONS; 查看所有可用函數,DESC FUNCTION [EXTENDED] <function_name>; 查看特定函數詳情。

1. 數值函數 (Mathematical Functions)

  • round(DOUBLE a): 四舍五入為BIGINT。
SELECT round(3.14159); -- 輸出: 3
  • round(DOUBLE a, INT d): 四舍五入到小數點后d位。
SELECT round(3.14159, 2); -- 輸出: 3.14
  • floor(DOUBLE a): 不大于a的最大整數。
SELECT floor(3.7); -- 輸出: 3
  • ceil(DOUBLE a)ceiling(DOUBLE a): 不小于a的最小整數。
SELECT ceil(3.1); -- 輸出: 4
  • abs(DOUBLE a): 絕對值。
SELECT abs(-5.5); -- 輸出: 5.5
  • pow(DOUBLE a, DOUBLE p)power(DOUBLE a, DOUBLE p): a的p次方。
SELECT pow(2, 3); -- 輸出: 8.0
  • sqrt(DOUBLE a): 平方根。
SELECT sqrt(16); -- 輸出: 4.0
  • rand()rand(INT seed): 0到1之間的隨機數。
SELECT rand(); -- 輸出: (一個隨機小數)
  • bin(BIGINT a): 二進制字符串。
SELECT bin(10); -- 輸出: 1010
  • hex(BIGINT a)hex(STRING a): 十六進制字符串。
SELECT hex(255); -- 輸出: FF
  • conv(BIGINT num, INT from_base, INT to_base): 進制轉換。
SELECT conv('A', 16, 10); -- 輸出: 10

2. 字符串函數 (String Functions)

  • length(STRING a): 字符串長度。
SELECT length('hello'); -- 輸出: 5
  • concat(STRING|BINARY a, STRING|BINARY b...): 連接字符串。
SELECT concat('Hi, ', 'Hive'); -- 輸出: Hi, Hive
  • concat_ws(STRING separator, STRING a, STRING b...): 帶分隔符連接。
SELECT concat_ws('-', 'A', 'B', 'C'); -- 輸出: A-B-C
  • lower(STRING a)lcase(STRING a): 轉小寫。
SELECT lower('HELLO'); -- 輸出: hello
  • upper(STRING a)ucase(STRING a): 轉大寫。
SELECT upper('world'); -- 輸出: WORLD
  • trim(STRING a): 去兩端空格。
SELECT trim('  Hive  '); -- 輸出: Hive
  • substring(STRING a, INT start[, INT len]): 取子串。
SELECT substring('HelloWorld', 1, 5); -- 輸出: Hello
  • replace(STRING a, STRING old, STRING new): 替換子串。
SELECT replace('banana', 'na', 'PA'); -- 輸出: baPAPA
  • instr(STRING str, STRING substr): 子串首次出現位置。
SELECT instr('apple-banana-orange', 'banana'); -- 輸出: 7
  • split(STRING str, STRING pat): 按正則分割,返回數組。
SELECT split('a,b,c', ','); -- 輸出: ["a","b","c"]
  • lpad(STRING str, INT len, STRING pad): 左填充。
SELECT lpad('hi', 5, '*'); -- 輸出: ***hi
  • rpad(STRING str, INT len, STRING pad): 右填充。
SELECT rpad('hi', 5, '*'); -- 輸出: hi***
  • regexp_extract(STRING subject, STRING pattern, INT index): 正則提取。
SELECT regexp_extract('user_123_name', 'user_(\\d+)_name', 1); -- 輸出: 123
  • regexp_replace(STRING initial_string, STRING pattern, STRING replacement): 正則替換。
SELECT regexp_replace('100-200', '-', ':'); -- 輸出: 100:200

3. 日期函數 (Date Functions)

  • current_date(): 當前日期。
SELECT current_date(); -- 輸出: (類似 2023-10-27)
  • current_timestamp(): 當前日期時間。
SELECT current_timestamp(); -- 輸出: (類似 2023-10-27 10:30:00.123)
  • unix_timestamp(): 當前Unix時間戳。
SELECT unix_timestamp(); -- 輸出: (當前秒級時間戳)
  • unix_timestamp(STRING date[, STRING pattern]): 日期轉Unix時間戳。
SELECT unix_timestamp('2023-10-27', 'yyyy-MM-dd'); -- 輸出: (對應時間戳)
  • from_unixtime(BIGINT unixtime[, STRING format]): Unix時間戳轉日期字符串。
SELECT from_unixtime(1698381000, 'yyyy/MM/dd HH:mm'); -- 輸出: 2023/10/27 10:30
  • to_date(STRING timestamp): 提取日期部分。
SELECT to_date('2023-10-27 10:30:00'); -- 輸出: 2023-10-27
  • date_format(STRING/TIMESTAMP/DATE ts, STRING fmt): 格式化日期。
SELECT date_format(current_date(), 'yyyy年MM月dd日'); -- 輸出: (類似 2023年10月27日)
  • year(STRING date), month(STRING date), day(STRING date): 提取年/月/日。
SELECT year('2023-10-27'), month('2023-10-27'); -- 輸出: 2023, 10
  • date_add(STRING/TIMESTAMP/DATE startdate, INT days): 日期加天數。
SELECT date_add('2023-10-27', 3); -- 輸出: 2023-10-30
  • date_sub(STRING/TIMESTAMP/DATE startdate, INT days): 日期減天數。
SELECT date_sub('2023-10-27', 3); -- 輸出: 2023-10-24
  • datediff(STRING enddate, STRING startdate): 日期天數差。
SELECT datediff('2023-10-30', '2023-10-27'); -- 輸出: 3

4. 條件函數 (Conditional Functions)

  • if(boolean testCondition, T valueTrue, T valueFalseOrNull): IF判斷。
SELECT if(1 > 0, 'Yes', 'No'); -- 輸出: Yes
  • CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END: 標準CASE WHEN。
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END AS grade
FROM (SELECT 85 AS score) t; -- 輸出: B
  • COALESCE(T v1, T v2, ...): 返回首個非NULL值。
SELECT COALESCE(NULL, 'Default1', 'Default2'); -- 輸出: Default1
  • NVL(T value, T default_value): value非NULL則返回value,否則返回default_value。
SELECT NVL(NULL, 'Is Null'); -- 輸出: Is Null

5. 類型轉換函數 (Type Conversion Functions)

  • cast(expr AS type): 強制類型轉換。
SELECT cast('123' AS INT) + cast('7' AS INT); -- 輸出: 130

6. 聚合函數 (Aggregate Functions) (常與 GROUP BY 聯用)

  • count(*)count(expr)count(DISTINCT expr): 計數。
SELECT count(*) FROM my_table;
SELECT count(DISTINCT user_id) FROM user_logs;
  • sum(col)sum(DISTINCT col): 求和。
SELECT sum(sales_amount) FROM sales_data;
  • avg(col)avg(DISTINCT col): 平均值。
SELECT avg(score) FROM student_scores;
  • min(col): 最小值。
SELECT min(price) FROM products;
  • max(col): 最大值。
SELECT max(temperature) FROM weather_records;

7. 集合函數 (Collection Functions) (處理ARRAY, MAP, STRUCT)

  • size(MAP<K,V> m)size(ARRAY<T> a): 返回Map或Array的大小。
SELECT size(array(1, 2, 3)); -- 輸出: 3
SELECT size(map('a', 1, 'b', 2)); -- 輸出: 2
  • array_contains(ARRAY<T> a, value): 判斷Array是否包含指定值。
SELECT array_contains(array('apple', 'banana'), 'apple'); -- 輸出: true
  • map_keys(MAP<K,V> m): 返回Map的所有鍵組成的Array。
SELECT map_keys(map('name', 'Alice', 'age', 30)); -- 輸出: ["name","age"] (順序可能不同)
  • map_values(MAP<K,V> m): 返回Map的所有值組成的Array。
SELECT map_values(map('name', 'Alice', 'age', 30)); -- 輸出: ["Alice","30"] (順序可能不同)
  • sort_array(ARRAY<T> a): 對Array進行排序。
SELECT sort_array(array(3, 1, 2)); -- 輸出: [1,2,3]

8. 表生成函數 (Table-Generating Functions - UDTF)

  • explode(ARRAY<T> a): 將數組每個元素轉為一行。
SELECT explode(array('A', 'B')) AS item;
-- 輸出:
-- A
-- B
  • explode(MAP<K,V> m): 將Map每個鍵值對轉為一行兩列。
SELECT explode(map('key1', 'val1')) AS (my_key, my_value);
-- 輸出:
-- key1  val1
  • posexplode(ARRAY<T> a): 類似 explode(array),額外輸出元素在數組中的位置(從0開始)。
SELECT posexplode(array('X', 'Y')) AS (pos, val);
-- 輸出:
-- 0  X
-- 1  Y
  • inline(ARRAY<STRUCT<f1:T1, f2:T2, ...>> a): 將結構體數組展開,每個結構體的字段成為獨立的列。
-- 假設table t有列 arr_struct: ARRAY<STRUCT<name:STRING, age:INT>>
-- 且某行 arr_struct 值為 [named_struct('name','Tom','age',20), named_struct('name','Jerry','age',18)]
-- SELECT inline(arr_struct) FROM t;
-- 輸出 (對于該行會產生兩行結果):
-- Tom   20
-- Jerry 18

9. 數據脫敏函數 (Data Masking/Anonymization - 通過組合或UDF實現)

Hive 內置的直接、專用的脫敏函數較少。通常通過組合現有字符串函數來實現,或者編寫用戶自定義函數 (UDF) 來完成復雜的脫敏邏輯。

  • 示例:部分屏蔽手機號 (組合字符串函數)
-- 假設 phone_number 是 '13812345678'
SELECT concat(substring(phone_number, 1, 3), '****', substring(phone_number, 8)) AS masked_phone
FROM (SELECT '13812345678' AS phone_number) t;
-- 輸出: 138****5678
  • 示例:屏蔽郵箱用戶名 (組合字符串函數)
-- 假設 email 是 'user_example@domain.com'
SELECT concat(substring(email, 1, 1), -- 第一個字符'****',                  -- 屏蔽符substring(email, locate('@', email) - 1, 1), -- @前一個字符substring(email, locate('@', email)) -- @及之后的部分
) AS masked_email
FROM (SELECT 'user_example@domain.com' AS email) t;
-- 輸出: u****e@domain.com (這是一個簡化示例,更復雜的正則UDF效果更好)

對于更復雜或通用的脫敏需求(如身份證號、銀行卡號按規則屏蔽,或基于角色的動態脫敏),通常推薦開發 UDF

10. 用戶自定義函數 (拓展)

內置函數無法滿足特定的業務邏輯時,Hive 允許用戶使用 Java (或其他語言,但Java最常見) 編寫自己的函數。

  • UDF (User-Defined Function): 一對一或多對一函數,輸入一行中的一個或多個值,輸出一個值。

    • 例如,創建一個 to_uppercase(string_col) 函數,將輸入字符串轉為大寫(雖然已有內置upper)。
    • 創建和使用步驟 (簡要)
      1. 編寫 Java 類繼承 org.apache.hadoop.hive.ql.exec.UDF
      2. 實現 evaluate() 方法。
      3. 將 Java 項目打成 JAR 包。
      4. 在 Hive 中注冊 JAR 包: ADD JAR /path/to/your.jar;
      5. 創建臨時或永久函數: CREATE TEMPORARY FUNCTION my_upper AS 'com.example.MyUpperUDF';
      6. 使用函數: SELECT my_upper(name) FROM my_table;
  • UDAF (User-Defined Aggregate Function): 多對一函數,類似 SUM(), COUNT(),對分組數據進行聚合。編寫 UDAF 相對復雜。

  • UDTF (User-Defined Table-Generating Function): 一對多函數,類似 explode(),輸入一行,輸出多行。

練習題

  1. 將字符串 “hive is great” 中的所有空格替換為下劃線 _
  2. 計算日期 “2023-01-15” 之后45天的日期。
  3. 有一個用戶評分表 ratings (user_id INT, score INT),如果用戶評分低于60則標記為 “不及格”,否則標記為 “及格”。寫出查詢。
  4. 將字符串 “ID:123,Name:Alice,Age:30” 按逗號分割,然后對每個部分按冒號分割,提取出 Name 的值 “Alice”。
  5. 有一個字段 tags 其值為 ARRAY 類型,如 ['TagA', 'TagB', 'TagC']。檢查該數組是否包含 ‘TagB’。
  6. 將一個包含用戶月消費金額的數組 monthly_spend ARRAY<INT> (例如 [100, 150, 120]) 展開成多行,每行顯示一個月的消費金額。
  7. 假設有一個字段 ip_address 存儲IP地址字符串,請使用內置函數(如果可能)將其最后一個點之后的部分替換為 ‘XXX’ (例如 ‘192.168.1.100’ -> ‘192.168.1.XXX’)。如果內置函數難以實現,請描述UDF的思路。
  8. 將 Unix 時間戳 1672531200 (代表 2023-01-01 00:00:00 UTC) 格式化為 “YYYY年MM月DD日 HH時mm分ss秒” 的形式。
  9. 從字符串 “apple,banana,orange,apple” 中提取出所有不重復的水果名稱,并計算不重復水果的數量。
  10. 如何使用 COALESCE 函數處理一個可能為NULL的 middle_name 字段,如果它為NULL,則在拼接全名時用空字符串代替?例如,first_name, middle_name, last_name

練習題答案

  1. 將字符串 “hive is great” 中的所有空格替換為下劃線 _
SELECT replace('hive is great', ' ', '_');
  1. 計算日期 “2023-01-15” 之后45天的日期。
SELECT date_add('2023-01-15', 45);
  1. 有一個用戶評分表 ratings (user_id INT, score INT),如果用戶評分低于60則標記為 “不及格”,否則標記為 “及格”。寫出查詢。
SELECT user_id, score, if(score < 60, '不及格', '及格') AS status FROM ratings;
-- 或者使用 CASE WHEN
-- SELECT user_id, score, CASE WHEN score < 60 THEN '不及格' ELSE '及格' END AS status FROM ratings;
  1. 將字符串 “ID:123,Name:Alice,Age:30” 按逗號分割,然后對每個部分按冒號分割,提取出 Name 的值 “Alice”。
SELECT split(kv[1], ':')[1] AS name_value
FROM (SELECT split('ID:123,Name:Alice,Age:30', ',') AS kv_array
) t
LATERAL VIEW explode(kv_array) exploded_table AS kv_pair_str
WHERE split(kv_pair_str, ':')[0] = 'Name';
-- 更簡潔的方式如果知道Name總在第二個位置:
SELECT split(split('ID:123,Name:Alice,Age:30', ',')[1], ':')[1];
  1. 有一個字段 tags 其值為 ARRAY 類型,如 ['TagA', 'TagB', 'TagC']。檢查該數組是否包含 ‘TagB’。
SELECT array_contains(tags, 'TagB') FROM (SELECT array('TagA', 'TagB', 'TagC') AS tags) t;
  1. 將一個包含用戶月消費金額的數組 monthly_spend ARRAY<INT> (例如 [100, 150, 120]) 展開成多行,每行顯示一個月的消費金額。
SELECT spend
FROM (SELECT array(100, 150, 120) AS monthly_spend) t
LATERAL VIEW explode(monthly_spend) exploded_table AS spend;
  1. 假設有一個字段 ip_address 存儲IP地址字符串,請使用內置函數(如果可能)將其最后一個點之后的部分替換為 ‘XXX’ (例如 ‘192.168.1.100’ -> ‘192.168.1.XXX’)。如果內置函數難以實現,請描述UDF的思路。
    使用內置函數比較復雜,需要多次使用 instrsubstringregexp_replace
SELECT regexp_replace(ip_address, '\\.[^.]+$', '.XXX') AS masked_ip
FROM (SELECT '192.168.1.100' AS ip_address) t;
-- 或者更精確控制,找到最后一個點的位置
-- SELECT concat(substring(ip_address, 1, instr(reverse(ip_address), '.') * -1 + length(ip_address) -1), '.XXX') ... (這種方式更復雜且易錯)

UDF思路:編寫一個Java UDF,輸入IP字符串。在Java中使用 lastIndexOf('.') 找到最后一個點的位置,然后使用 substring() 截取前面的部分,并拼接上 “.XXX”。

  1. 將 Unix 時間戳 1672531200 (代表 2023-01-01 00:00:00 UTC) 格式化為 “YYYY年MM月DD日 HH時mm分ss秒” 的形式。
SELECT from_unixtime(1672531200, 'yyyy年MM月dd日 HH時mm分ss秒');
  1. 從字符串 “apple,banana,orange,apple” 中提取出所有不重復的水果名稱,并計算不重復水果的數量。
SELECT collect_set(fruit) AS unique_fruits, size(collect_set(fruit)) AS unique_fruit_count
FROM (SELECT explode(split('apple,banana,orange,apple', ',')) AS fruit
) t_fruits;
  1. 如何使用 COALESCE 函數處理一個可能為NULL的 middle_name 字段,如果它為NULL,則在拼接全名時用空字符串代替?例如,first_name, middle_name, last_name
SELECT concat_ws(' ', first_name, COALESCE(middle_name, ''), last_name) AS full_name
FROM (SELECT 'John' AS first_name, NULL AS middle_name, 'Doe' AS last_nameUNION ALLSELECT 'Jane' AS first_name, 'M' AS middle_name, 'Smith' AS last_name
) t_names;
-- 對于 'John', NULL, 'Doe' 會輸出 "John  Doe" (注意concat_ws對空字符串的處理)
-- 如果希望中間沒有多余空格,可以這樣:
-- SELECT trim(concat(first_name, ' ', COALESCE(concat(middle_name, ' '), ''), last_name)) AS full_name ...

更優雅的方式是針對 concat_ws 的特性,如果 COALESCE(middle_name, NULL) 結果是 NULL,concat_ws 會跳過它。但如果希望它是空字符串而不是被跳過(比如為了保持名字間的空格),上面的 COALESCE(middle_name, '') 是對的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81217.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux之Nginx安裝及配置原理篇(一)

Nginx安裝及配置 前情回顧 首先針對Nginx進程模型&#xff0c;我們回顧一下它的原理機制&#xff0c;我們知道它是通過Master通過fork分發任務節點給予work節點&#xff0c;然后work節點觸發了event事件&#xff0c;之后通過一個access_muttex互斥鎖&#xff0c;來單線程調用我…

嵌入式培訓之數據結構學習(五)棧與隊列

一、棧 &#xff08;一&#xff09;棧的基本概念 1、棧的定義&#xff1a; 注&#xff1a;線性表中的棧在堆區&#xff08;因為是malloc來的&#xff09;&#xff1b;系統中的棧區存儲局部變量、函數形參、函數返回值地址。 2、棧頂和棧底&#xff1a; 允許插入和刪除的一端…

深度學習---知識蒸餾(Knowledge Distillation, KD)

一、知識蒸餾的本質與起源 定義&#xff1a; 知識蒸餾是一種模型壓縮與遷移技術&#xff0c;通過將復雜高性能的教師模型&#xff08;Teacher Model&#xff09;所學的“知識”遷移到輕量級的學生模型&#xff08;Student Model&#xff09;&#xff0c;使學生模型在參數量和計…

ARP Detection MAC-Address Static

一、ARP Detection&#xff08;ARP檢測&#xff09; ? 定義&#xff1a; ARP檢測是一種防止ARP欺騙攻擊的安全機制。它通過監控或驗證網絡中的ARP報文&#xff0c;來判斷是否存在偽造的ARP信息。 &#x1f50d; 工作原理&#xff1a; 網絡設備&#xff08;如交換機&#xf…

基于 Python 的界面程序復現:標準干涉槽型設計計算及仿真

基于 Python 的界面程序復現&#xff1a;標準干涉槽型設計計算及仿真 在工業設計與制造領域&#xff0c;刀具的設計與優化是提高生產效率和產品質量的關鍵環節之一。本文將介紹如何使用 Python 復現一個用于標準干涉槽型設計計算及仿真的界面程序&#xff0c;旨在幫助工程師和…

Python繪制南丁格爾玫瑰圖:從入門到實戰

Python繪制南丁格爾玫瑰圖&#xff1a;從入門到實戰 引言 南丁格爾玫瑰圖&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;也被稱為極區圖&#xff08;Polar Area Chart&#xff09;&#xff0c;是一種獨特的數據可視化方式。這種圖表由弗洛倫斯南丁格爾&#xff…

計算機操作系統概要

不謀萬世者&#xff0c;不?謀?時。不謀全局者 &#xff0c;足謀?域 。 ——陳澹然《寤?》《遷都建藩議》 操作系統 一.對文件簡單操作的常用基礎指令 ls ls 選項 目錄或?件名:羅列當前?錄下的?件 -l&#xff1a;以長格式顯示?件和?錄的詳細信息 -a 或 --all&…

<PLC><視覺><機器人>基于海康威視視覺檢測和UR機械臂,如何實現N點標定?

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,相關設備如觸摸屏(HMI)、交換機等工控產品,如果有…

從專家編碼到神經網絡學習:DTM 的符號操作新范式

1st author: Paul Soulos paper: Differentiable Tree Operations Promote Compositional Generalization ICML 2023 code: psoulos/dtm: Differentiable Tree Machine 1. 問題與思路 現代深度學習在連續向量空間中取得了巨大成功&#xff0c;然而在處理具有顯式結構&#x…

微信小程序第三方代開發模式技術調研與實踐總結

?? 微信小程序第三方代開發模式技術調研與實踐總結 ?? 前言 隨著企業對私有化品牌運營訴求的增加,許多大型客戶希望將原本由 SaaS 平臺統一提供的小程序遷移至自有主體(AppID)下運行,同時又希望繼續沿用 SaaS 平臺的業務服務與數據托管方式。微信開放平臺提供的“小程…

開啟智能未來:DeepSeek賦能行業變革之路

前言 在人工智能重構生產關系的2025年&#xff0c;DeepSeek以其革命性的推理能力和Python生態的技術延展性&#xff0c;正在重塑內容創作與數據智能的邊界。本書以"工具迭代思維升維"為雙輪驅動&#xff0c;構建從認知突破到商業落地的完整知識圖譜。 DeepSeek的崛…

常見三維引擎坐標軸 webgl threejs cesium blender unity ue 左手坐標系、右手坐標系、坐標軸方向

平臺 / 引擎坐標系類型Up&#xff08;上&#xff09;方向Forward&#xff08;前進&#xff09;方向前進方向依據說明Unity左手坐標系YZtransform.forward 是 Z 軸正方向&#xff0c;默認攝像機朝 Z 看。Unreal Engine左手坐標系ZXUE 的角色面朝 X&#xff0c;默認使用 GetActor…

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise論文閱讀

冷擴散&#xff1a;無需噪聲的任意圖像變換反轉 摘要 標準擴散模型通常涉及兩個核心步驟&#xff1a;圖像降質 &#xff08;添加高斯噪聲&#xff09;和圖像恢復 &#xff08;去噪操作&#xff09;。本文發現&#xff0c;擴散模型的生成能力并不強烈依賴于噪聲的選擇&#xf…

Java并發編程核心組件簡單了解

一、Lock體系 1. ReentrantLock&#xff08;可重入鎖&#xff09; Lock lock new ReentrantLock(); lock.lock(); try {// 臨界區代碼 } finally {lock.unlock(); }特點&#xff1a;可重入、支持公平/非公平策略優勢&#xff1a;可中斷鎖獲取、定時鎖等待使用場景&#xff1…

第二個五年計劃!

下一階段&#xff01;5年后&#xff01;33歲&#xff01;體重維持在125斤內&#xff01;腰圍74&#xff01; 健康目標&#xff1a; 體檢指標正常&#xff0c;結節保持較小甚至變小&#xff01; 工作目標&#xff1a; 每年至少在一次考評里拿A&#xff08;最高S&#xff0c;A我理…

Redis(三) - 使用Java操作Redis詳解

文章目錄 前言一、創建項目二、導入依賴三、鍵操作四、字符串操作五、列表操作六、集合操作七、哈希表操作八、有序集合操作九、完整代碼1. 完整代碼2. 項目下載 前言 本文主要介紹如何使用 Java 操作 Redis 數據庫&#xff0c;涵蓋項目創建、依賴導入及 Redis 各數據類型&…

【Folium】使用離線地圖

文章目錄 相關文獻離線地圖下載Folium 使用離線地圖 相關文獻 Folium — Folium 0.19.5 documentationOffline Map Maker 離線地圖下載 我們使用 Offline Map Maker 進行地圖下載。 特別注意&#xff1a;Folium 默認支持 WGS84 坐標系&#xff0c;建議下載 WGS84 坐標系的地…

DeepSearch:字節新一代 DeerFlow 框架

項目地址&#xff1a;https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架構設計】獨家設計的 Research Team 機制&#xff0c;支持多輪對話、多輪決策和多輪任務執行。與 LangChain 原版 Supervisor 相比&#xff0c;顯著減少 Tokens 消耗和 API 調用次數&#…

Qt—用SQLite實現簡單的注冊登錄界面

1.實現目標 本次實現通過SQLite制作一個簡易的登錄窗口&#xff0c;當點擊注冊按鈕時&#xff0c;登錄窗口會消失&#xff0c;會出現一個新的注冊界面&#xff1b;完成注冊或退出注冊時&#xff0c;注冊窗口會消失&#xff0c;重新出現登錄窗口。注冊過的用戶信息會出現在SQLi…

day 18:零基礎學嵌入式之數據結構——

一、基礎內容 1.數據結構&#xff1a;相互之間存在一種或多種特定關系的數據元素的集合。 2.邏輯結構 &#xff08;1&#xff09;集合&#xff0c;所有數據在同一個集合中&#xff0c;關系平等。 &#xff08;2&#xff09;線性&#xff0c;數據和數據之間是一對一的關系 &am…