spark–sql项目

spark–sql项目_第1张图片

数据读取与格式转换

读取JSON数据:使用Spark提供的读取接口(如 spark.read.json()  ,在不同编程语言接口下使用方式类似)将给定的JSON格式数据读入Spark中,形成 DataFrame  。

import org.apache.spark.sql.SparkSession

object JsonDataProcessing {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()

     .appName("JsonDataRead")

     .master("local[*]")

     .getOrCreate()

    // 读取JSON数据,形成DataFrame

    val df = spark.read.json("path/to/your/json/file.json")

    df.show()

  }

}

格式转换:按照题目要求,利用 get_json_object 函数(如果是在SQL语句中操作,在不同语言中使用该函数的语法略有差异)对JSON格式数据进行格式转换,以便后续分析处理。

import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.functions.get_json_object

object JsonDataFormatConversion {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()

     .appName("JsonDataFormatConversion")

     .master("local[*]")

     .getOrCreate()

    val df = spark.read.json("path/to/your/json/file.json")

    // 利用get_json_object函数进行格式转换

    val convertedDf = df.select(

      get_json_object($"data", "$.uid").as("uid"),

      get_json_object($"data", "$.phone").as("phone"),

      get_json_object($"data", "$.addr").as("addr")

    )

    convertedDf.show()

  }

}

统计有效数据条数

 import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.functions.get_json_object

object ValidDataCount {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()

     .appName("ValidDataCount")

     .master("local[*]")

     .getOrCreate()

    val df = spark.read.json("path/to/your/json/file.json")

    val convertedDf = df.select(

      get_json_object($"data", "$.uid").as("uid"),

      get_json_object($"data", "$.phone").as("phone"),

      get_json_object($"data", "$.addr").as("addr")

    )

    // 筛选有效数据(uid、phone、addr三个字段均无空值)

    val validDf = convertedDf.filter($"uid" =!= "" && $"phone" =!= "" && $"addr" =!= "")

    // 统计有效数据记录条数

    val count = validDf.count()

    println(s"有效数据记录条数为: $count")

  }

}

筛选有效数据:依据有效数据的定义( uid 、 phone 、 addr 三个字段均无空值 ),使用过滤条件(如 filter 函数 )筛选出满足条件的数据行。

筛选有效数据并统计条数

根据有效数据的定义(uid、phone、addr三个字段均无空值),使用filter函数筛选出满足条件的数据行,并统计记录条数。

# 筛选有效数据

valid_df = df.filter(df["uid"].isNotNull() & df["phone"].isNotNull() & df["addr"].isNotNull())

# 统计有效数据条数

valid_count = valid_df.count()

print(f"有效数据条数: {valid_count}")

统计用户数量最多的前二十个地址

以addr字段为分组依据,使用groupBy函数对有效数据进行分组,然后统计每个地址对应的用户数量(即记录数)。根据统计出的用户数量,使用orderBy函数按降序排列地址,并使用limit函数选取用户数量最多的前二十个地址。

# 分组聚合统计每个地址的用户数量

address_counts = valid_df.groupBy("addr").count()

# 排序并选取前二十个地址

top_20_addresses = address_counts.orderBy(address_counts["count"].desc()).limit(20)

# 显示结果

top_20_addresses.show()

spark–sql项目_第2张图片

分组聚合:以 addr 字段为分组依据,使用 groupBy 函数对有效数据进行分组,然后通过 count 函数统计每个地址对应的用户数量(即记录数)。

排序与筛选:根据统计出的用户数量,使用排序函数(如 orderBy  ,并按降序排列)对地址进行排序,最后使用 limit 函数选取用户数量最多的前二十个地址 。

你可能感兴趣的:(spark,sql,大数据)