这段代码是一个使用 Spark 进行数据分析的示例。下面是代码解释:
- 引入必要的包:
import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}
创建一个名为
SparkAnalysis
的对象,作为程序的入口点。在
main
方法中,创建了一个SparkConf
对象,并设置了应用程序的名称和运行模式。使用
SparkSession.builder()
构建一个SparkSession
对象,并通过配置文件初始化。导入隐式转换,使得可以方便地操作 DataFrame。
定义了一个名为
mySchema
的结构类型(StructType),描述了待读取的 Excel 数据文件中每列的字段名和数据类型。使用
spark.read.format("com.crealytics.spark.excel")
读取 Excel 文件,并指定选项和模式加载数据。将加载的数据赋值给变量inputDF
,它表示一个 DataFrame。调用
inputDF.show()
将加载的数据显示在控制台上。使用
createOrReplaceTempView
方法将 DataFrame 注册成临时表 “travel_info”,以供后续使用。开始进行数据分析:
a) 查询销量排名前20的热门景点:
val df01 = spark.sql(
"""
select name, sales
from travel_info
where nvl(sales+0,null) is not null
order by cast(sales as int)
desc limit 20
""".stripMargin)
df01.show()
b) 查询各城市4星级以上景点的数量,并按照数量降序排列:
val df02 = spark.sql(
"""
SELECT city, count(*) cnt
from travel_info
where star like '%4%' or star like '%5%'
group by city
order by cnt desc
""".stripMargin)
df02.show()
c) 计算免费景点和非免费景点的数量: “` val df03 = spark.sql(
"""
SELECT is_free, count(*) cnt
from travel_info
group by is_free
""".stripMargin)
df03.show()
```
- 使用
repartition
方法将结果 DataFrame 进行重分区,然后使用write
方法保存结果到本地文件系统,以 JSON 格式存储。
通过这段代码,你可以学习如何使用 Spark 进行数据加载、DataFrame 操作、SQL 查询和结果保存等常见的数据分析任务。
内容由零声教学AI助手提供,问题来源于学员提问