Spark编程注意事项

SimpleDateFormat

我们使用spark做数据处理最频繁使用的就是simpleDateFormat来转化日期格式,在实践中发现,sdf总是莫名其妙的出现错误,例如:“java.lang.NumberFormatException: For input string: “””,而且有时候出现错误的记录个数都不一样。后来通过查阅SimpleDateFormat有这么一段内容:

Date formats are not synchronized.
 * It is recommended to create separate format instances for each thread.
 * If multiple threads access a format concurrently, it must be synchronized
 * externally.

说明simpleDateFormat不是多线程安全的。因此我们需要使用ThreadLocal来完成线程安全。

### Spark RDD 连接操作 示例代码与编程实验 在 Spark RDD 编程中,连接操作通常用于将两个或多个数据集基于键进行合并。以下是一个详细的示例代码和解释,展示如何使用 `join` 操作对两个 RDD 进行连接。 #### 示例代码 ```scala import org.apache.spark.SparkContext import org.apache.spark.SparkConf object RDDJoinExample { def main(args: Array[String]) { val conf = new SparkConf().setAppName("RDDJoinExample").setMaster("local[*]") val sc = new SparkContext(conf) // 创建第一个 RDD (Key-Value 对) val rdd1 = sc.parallelize(Seq( ("apple", 1), ("banana", 2), ("orange", 3) )) // 创建第二个 RDD (Key-Value 对) val rdd2 = sc.parallelize(Seq( ("apple", "fruit"), ("banana", "yellow"), ("grape", "small") )) // 使用 join 操作将两个 RDD 基于相同的 key 连接 val joinedRDD = rdd1.join(rdd2) // 打印结果 println("Joined RDD:") joinedRDD.collect.foreach(println) sc.stop() } } ``` #### 解释 上述代码展示了如何通过 `join` 操作将两个 RDD 连接起来。以下是关键点的详细说明: - **创建 RDD**:通过 `parallelize` 方法创建两个包含键值对的 RDD[^4]。 - **连接操作**:`rdd1.join(rdd2)` 将两个 RDD 中具有相同键的元素连接在一起,生成一个新的 RDD,其中每个元素包含来自两个原始 RDD 的值[^2]。 - **惰性计算**:`join` 是一个转换操作,只有在调用行动操作(如 `collect`)时才会触发实际计算[^1]。 #### 输出结果 运行上述代码后,输出如下: ``` Joined RDD: (apple,(1,fruit)) (banana,(2,yellow)) ``` #### 注意事项 - 如果某个键只存在于其中一个 RDD 中,则不会出现在结果中。例如,`"grape"` 只存在于 `rdd2` 中,因此未出现在最终结果中[^5]。 - 如果需要保留所有键,可以考虑使用 `leftOuterJoin`、`rightOuterJoin` 或 `fullOuterJoin` 等外连接操作[^3]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值