Spark项目学习-慕课网日志分析-days3-DataFrame&Dataset

本文深入探讨了Spark中的DataFrame概念,对比了其与RDD的区别,详细介绍了DataFrame的基本API操作,包括打印Schema、显示数据、选择特定列、过滤数据、分组聚合、排序以及表连接等。此外,还讲解了DataFrame与RDD之间的互操作方式,以及如何使用Spark解析CSV文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.DataFrame

    1)不是Spark SQL提出的,而是早期在R,Pandas中产生的

    2)DataFrame是一个以列(列名、列的类型、列值)的形式构成的分布式的数据集,按照列赋予不同的名称

    3)是关系型数据库中的一张表或者是R/Python中的一个dataframe概念,但是具有更多优化

 

2.DataFrame对比RDD(DataFrame能够具有更多信息)

RDD:

    java/scala ==> jvm

    python ==> python runtime

DataFrame:

    java/scala/python ==> Logic Plan 不同语言编程效果一样

 

3.DataFrame基本API常用操作

    1)peopleDF.printSchema 打印Schema信息

    2)peopleDF.show(100) 输出前100条记录

    3)peopleDF.select("name").show() 只查询name字段的记录

    peopleDF.select(peopleDF.col("name"),(peopleDF.col("age")+10).as("age2")).show() 查询某几列所有的数据,并且把数据都+10

    4)peopleDF.filter(peopleDF.col("age">19).show() 对某一列的值进行过滤

      studentDF.filter("substring(name,0,1)='M'").show 通过SubString函数将首字母为M的名字展示出来

    5)peopleDF.groupBy("age").count().show() 根据某一列进行分组再进行聚合操作

    6)peopleDF.sort(peopleDF("name").asc,peopleDF("id").desc).show  排序 按名字升序,按id降序

    7)peopleDF.join(peopleDF2,peopleDF.col("id")===peopleDF2.col("id")).show join表连接操作

 

4.DataFrame和RDD的互操作

    1)使用反射机制,将RDD转换为DataFrame,使用反射

 

5.DataFrame API操作案例实战(学生信息统计案例)

 

6.Dataset概述及使用

    1)Dataset是一个分布式的数据集,强类型,支持lambda公式,提供优化引擎,可以在Java和Scala里面使用

    2)spark如何解析csv文件

      val df = spark.read.option("header","true").option("inferScheme","true").csv(path)

      df.show()

    3)导入隐式转换:import spark.implicits._

    4)Dataset概述:静态类型和运行时类型安全,nengg

### Apache Spark 中的时间处理功能 Apache Spark 提供了一系列与时间相关的功能和操作,这些功能主要集中在 **Spark SQL** 和 **Structured Streaming** 模块中。以下是关于 Spark 时间处理的关键点: #### 1. 时间戳支持 在 Spark SQL 中,`TIMESTAMP` 类型被广泛用于表示日期和时间。该类型可以存储精确到毫秒级别的日期时间信息[^4]。开发者可以通过 `to_timestamp()` 函数将字符串转换为时间戳对象。 ```sql SELECT to_timestamp(&#39;2023-10-01 12:34:56&#39;, &#39;yyyy-MM-dd HH:mm:ss&#39;) AS timestamp_value; ``` 此函数允许指定自定义的时间格式模式以适应不同的输入数据结构[^4]。 #### 2. 窗口操作 (Window Functions) 窗口函数是 Spark SQL 中一种强大的工具,尤其适用于涉及时间序列分析的任务。常见的窗口函数包括 `ROW_NUMBER()`, `RANK()`, 和 `SUM()` 等。当结合时间字段使用时,它们可以帮助实现诸如滑动平均值或累积求和等功能[^4]。 例如,在 Structured Streaming 中,可以利用基于时间的窗口聚合来统计每分钟内的事件数量: ```scala import org.apache.spark.sql.functions._ val windowedCounts = dataFrame .groupBy(window($"timestamp", "1 minute")) .agg(count("*").as("event_count")) windowedCounts.show() ``` 这里展示了如何创建一个一分钟长度的滚动窗口,并计算每个窗口中的记录数[^2]。 #### 3. 时间间隔运算 除了基本的时间戳外,Spark 还提供了丰富的 API 来处理时间段差异。比如,`datediff()` 可用来获取两个日期之间的天数差;而 `unix_timestamp()` 则能返回给定时间对应的 Unix 时间戳整数值[^4]。 ```python from pyspark.sql import functions as F df = spark.createDataFrame([["2023-10-01"], ["2023-10-15"]], ["date"]) df.select(F.datediff(F.lit("2023-10-10"), df.date).alias("days_diff")).show() ``` 这段代码片段演示了如何计算某固定日期相对于表中各条目日期的距离(单位为日)[^4]。 #### 4. 定时触发器 (Trigger Processing Time) 对于实时流式应用而言,定时机制尤为重要。通过设置合适的触发策略,用户可以让作业按照预设频率定期运行或者仅当新数据到达后再启动新一轮计算[^2]。这种灵活性使得复杂业务逻辑得以高效实施而不浪费资源等待不必要的延迟。 ```java Dataset<Row> result = streamingInputDF.writeStream() .outputMode("append") .trigger(ProcessingTime.create("5 seconds")) // 设置每隔五秒钟刷新一次结果 .start(); ``` 上述 Java 示例设置了每五秒执行一次批处理流程的操作方式。 --- ### 性能优化方向 尽管目前版本已经具备相当完善的特性集合,但正如官方文档所提到那样,围绕着内存分配、线程调度以及跨节点间消息传递等方面的进一步调优工作仍在持续开展当中[^3]。这意味着未来可能会看到更加智能化自动调整参数的能力加入进来从而简化开发人员的工作负担同时也提高了整体系统的吞吐量表现水平。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值