Spark 基础函数

创建RDD

根据内容parallelize ():

Line = sc.parallelize(["pandas", "Ilike pandas"])

根据文本文件 textFile():

inputRDD = sc.textFile("log.txt")

映射RDD

一对一映射 map(): 将每个数据项变换后形成新的数据项作为结果

num = sc.parallelize([1,2,3,4])
squared = nums.map(lambda x: x * x).collect()
for num in squared:
	print("%i" % (num))
一对多映射 flatMap():将每个数据项变换后形成多个数据项,然后把所有数据项作为结果

num = sc.parallelize(["1 2","2 3 4"])
words = nums.map(lambda x: x.split(" ")).collect()
for word in words:
	print(word)

过滤RDD filler():

inputRDD = sc.textFile("log.txt")
errorsRDD = inputRDD.filter(lambda x:"error" in x)

合并RDD union():

inputRDD = sc.textFile("log.txt")
errorsRDD = inputRDD.filter(lambda x:"error" in x)
warningRDD = inputRDD.filter(lambda x:"warning" in x)
badLinesRDD = errorsRDD.union(warningRDD)

计算RDD长度 Count()

print( "Inpur had " + badLinesRDD.count() + “ concerning lines”)
读取RDD内容到本地

部分读取 take(Length) 从RDD中读取length条记录到本地

for line in badLinesRDD.take(10):
	print(line)

全部读取 collect()

for line in badLinesRDD.collect():
	print(line)

aggregate() 复杂的reduce

from pyspark import SparkContext, SparkConf

sc = SparkContext("local[2]", "Simple App")

nums = sc.parallelize([1, 2, 3, 4, 5])
sumCount = nums.aggregate((0, 0),
                          (lambda acc, value: (acc[0]+value, acc[1]+1)),
                          (lambda acc1, acc2: (acc1[0]+acc2[0], acc1[1]+acc2[1])))
print(sumCount[0]/float(sumCount[1]))





### Spark 函数使用方法与示例 #### 1. 常见的 Spark SQL 函数 Spark 提供了一组丰富的内置函数用于数据处理,这些函数可以分为多个类别,如字符串处理、数值计算以及日期时间操作等[^1]。以下是几个常见的 Spark SQL 函数及其用法: - **`concat`**: 将两个或更多列连接成一个新的字符串。 ```python from pyspark.sql.functions import concat, col, lit df.select(concat(col("firstname"), lit(" "), col("lastname")).alias("fullname")) ``` - **`substring`**: 截取指定位置和长度的子串。 ```python from pyspark.sql.functions import substring df.select(substring(df['col'], 0, 5).alias('sub_col')) ``` - **`datediff`**: 计算两个日期之间的天数差。 ```python from pyspark.sql.functions import datediff df.select(datediff(col("end_date"), col("start_date")).alias("date_diff")) ``` 以上代码展示了如何通过 `pyspark.sql.functions` 调用内置函数并应用于 DataFrame 的列上。 --- #### 2. 创建 SparkSession 并运行基本查询 为了能够执行上述函数,首先需要创建一个 SparkSession 实例。这是进入 Spark SQL 功能的核心入口[^2]。下面是一段简单的代码示例展示如何初始化 SparkSession 和加载数据: ```python from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("example") \ .getOrCreate() data = [("James", "Smith", "USA", "CA"), ("Michael", "Rose", "USA", "NY"), ("Robert", "Williams", "USA", "CA")] columns = ["firstname", "lastname", "country", "state"] df = spark.createDataFrame(data=data, schema=columns) df.show() ``` 此代码片段定义了一个包含姓名、国家和地区字段的数据集,并将其转换为 DataFrame 进行后续操作。 --- #### 3. 外部命令调用 (Pipe) 除了标准库中的功能外,还可以利用外部工具扩展 Spark 的能力。例如,在 Scala 中可以通过管道 (`pipe`) 方法将 RDD 数据传递给 shell 脚本进行进一步加工[^3]。如下所示的是一个简单例子: ```scala def pipeExample(sc: SparkContext): Unit = { val data = List("hi", "hello", "how", "are", "you") sc.makeRDD(data) .pipe("/bin/cat") // 替代 echo.sh 可能更通用一些 .collect() .foreach(println) } ``` 注意这里的路径应替换为你实际环境中可访问的脚本文件地址或者系统命令。 --- #### 总结 通过对 Spark 内置函数的学习以及实践案例的理解,开发者可以根据具体需求灵活运用各种 API 来完成复杂的大规模数据分析任务。无论是基础的字符串拼接还是高级的时间序列运算,都可以借助于官方文档找到对应的解决方案^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值