2025-09-20
Linux
00

Linux Shell 是与操作系统交互的强大工具。无论是系统管理、文件处理还是网络配置,Shell 命令都能让任务变得简单而高效。本文将整理一些常用的 Linux Shell 命令,帮助大家更好地掌握和使用 Linux。

基本命令

1. ls - 列出目录内容

列出目录中的文件和子目录。

bash
ls ls -l # 详细信息 ls -a # 包括隐藏文件

2. cd - 切换目录

切换到指定目录。

bash
cd /path/to/directory cd ~ # 切换到主目录 cd - # 切换到上一个目录
2025-09-20
Spark
00

通用的加载和保存方式

SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的 API,根据不同的参数读取和保存不同格式的数据,SparkSQL 默认读取和保存的文件格式 为 parquet

  1. 加载数据

spark.read.load 是加载数据的通用方法

scala
scala> spark.read. csv format jdbc json load option options orc parquet schema table text textFile

如果读取不同格式的数据,可以对不同的数据格式进行设定

scala
scala> spark.read.format("…")[.option("…")].load("…")
  • format("…"):指定加载的数据类型,包括"csv"、"jdbc"、"json"、"orc"、"parquet"和 "textFile"。
  • load("…"):在"csv"、"jdbc"、"json"、"orc"、"parquet"和"textFile"格式下需要传入加载 数据的路径。
  • option("…"):在"jdbc"格式下需要传入 JDBC 相应参数,url、user、password 和 dbtable 我们前面都是使用 read API 先把文件加载到 DataFrame 然后再查询,其实,我们也可以直 接在文件上进行查询: 文件格式.文件路径
2025-09-20
Spark
00

UDF

  1. 创建 DataFrame
scala
scala> val df = spark.read.json("data/user.json") df: org.apache.spark.sql.DataFrame = [age: bigint, username: string]
  1. 注册UDF
scala
scala> spark.udf.register("addName",(x:String)=> "Name:"+x) res9: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,Some(List(StringType)))
  1. 创建临时表
scala
scala> df.createOrReplaceTempView("people")
  1. 应用UDF
scala
scala> spark.sql("Select addName(name),age from people").show()
2025-09-20
Spark
00

实现原理

累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在 Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后, 传回 Driver 端进行 merge。

基础编程

系统累加器

scala
val rdd = sc.makeRDD(List(1,2,3,4,5)) // 声明累加器 var sum = sc.longAccumulator("sum"); rdd.foreach( num => { // 使用累加器 sum.add(num) } ) // 获取累加器的值 println("sum = " + sum.value)
2025-09-20
Python
00

在现代编程中,多线程是提高程序并发性和性能的重要手段。然而,在 Python 中,理解多线程的工作机制以及全局解释器锁(Global Interpreter Lock,简称 GIL)对于有效使用多线程编程至关重要。本文将深入探讨多线程和 GIL 的概念,解释它们的工作原理,以及在 Python 编程中的实际影响和解决方案。

1. 什么是多线程?

多线程是一种并发执行多任务的编程技术。通过将一个程序分解为多个线程,可以同时执行多个任务,从而提高程序的运行效率。每个线程共享相同的进程资源(如内存),但可以独立执行代码。

在 Python 中,可以使用 threading 模块来创建和管理线程。例如:

python
import threading def print_numbers(): for i in range(10): print(i) thread = threading.Thread(target=print_numbers) thread.start() thread.join()