Spark SQL基本操作

大数据学习笔记03

Spark SQL基本操作

  1. 将下列json数据复制到你的ubuntu系统/usr/local/spark下,并保存命名为employee.json
{ "id":1 ,"name":" Ella","age":36 }
{ "id":2,"name":"Bob","age":29 }
{ "id":3 ,"name":"Jack","age":29 }
{ "id":4 ,"name":"Jim","age":28 }
{ "id":5 ,"name":"Damon" }
{ "id":5 ,"name":"Damon" }
  • 首先为employee.json创建DataFrame,并写出Python语句完成以下操作:
  • 创建DataFrame
from pyspark import SparkContext,Sparkconf
form pyspark.sql import Sparksession
spark=SparkSession.builder().getOrCreate()
  • 查询DataFrame的所有数据
df = spark.read.json("file:///usr/local/spark/employee.json")
df.show()
  • 查询所有数据,并去除重复的数据
df.distinct().show()
  • 查询所有数据,打印时去除id字段
df.drop("id").show()
  • 筛选age>30的记录
df.filter(df.age > 30 ).show()
  • 将数据按name分组
df.groupBy("name").count().show()
  • 将数据按name升序排列
df.sort(df.name.asc()).show()
  • 取出前3行数据
df.take(3) 或python> df.head(3)
  • 查询所有记录的name列,并为其取别名为username
df.select(df.name.alias("username")).show()
  • 查询年龄age的平均值
df.agg({"age": "mean"}).show()
  • 查询年龄age的最大值
df.agg({"age": "max"}).show()
  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是回复: 好的,我明白了。您需要将包含id、name和age的数据复制到Ubuntu系统的/usr/local/spark目录下,并将其命名为employee.txt。然后,您需要将RDD转换为DataFrame,并按id:1排序。 ### 回答2: 首先,将employee.txt文件保存到Ubuntu系统的/usr/local/spark目录下,可以使用以下命令将文件复制到该目录下: ``` sudo cp /path/to/employee.txt /usr/local/spark/ ``` 接下来,我们可以使用Spark的API来读取该源文件并创建RDD,然后再将RDD转换为DataFrame。 在Spark中,可以使用以下代码创建一个SparkSession并读取文本文件: ```scala import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("Read Employee Data") .master("local[*]") .getOrCreate() val employeeRDD = spark.sparkContext.textFile("/usr/local/spark/employee.txt") ``` 这样将会创建一个SparkSession,使用本地模式运行,并读取/usr/local/spark目录下的employee.txt文件。employeeRDD现在是一个RDD对象,每个元素都是一个字符串,表示employee.txt文件中的一行。 接下来,我们可以使用以下代码来将RDD转换为DataFrame,并按id字段过滤id为1的数据: ```scala import org.apache.spark.sql.types._ import org.apache.spark.sql.functions._ // 定义schema val schema = StructType( Array( StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("age", IntegerType, true) ) ) // 将RDD转换为DataFrame并应用schema val employeeDF = spark.createDataFrame( employeeRDD.map(_.split(",")), schema ) // 过滤id为1的数据 val filteredDF = employeeDF.filter(col("id") === 1) ``` 以上代码首先定义了DataFrame的schema,然后使用SparkSession的createDataFrame方法,将RDD转换为DataFrame,并应用定义的schema。最后,使用filter函数过滤id为1的数据。 完整代码如下: ```scala import org.apache.spark.sql.SparkSession import org.apache.spark.sql.types._ import org.apache.spark.sql.functions._ val spark = SparkSession.builder() .appName("Read Employee Data") .master("local[*]") .getOrCreate() val employeeRDD = spark.sparkContext.textFile("/usr/local/spark/employee.txt") val schema = StructType( Array( StructField("id", IntegerType, true), StructField("name", StringType, true), StructField("age", IntegerType, true) ) ) val employeeDF = spark.createDataFrame( employeeRDD.map(_.split(",")), schema ) val filteredDF = employeeDF.filter(col("id") === 1) filteredDF.show() ``` 这段代码将会输出id为1的所有员工的信息。 ### 回答3: 首先,将源文件保存在Ubuntu系统中的/usr/local/spark目录下,命名为employee.txt。接下来,可以使用Spark的API将该文件读入成为一个RDD,并将该RDD转换为DataFrame。代码如下: ```scala import org.apache.spark.sql.{SparkSession, DataFrame} val spark = SparkSession.builder().appName("employee").master("local[*]").getOrCreate() val sc = spark.sparkContext val textFile = sc.textFile("/usr/local/spark/employee.txt") val df = textFile.map(_.split(",")) .map(e => (e(0).toInt, e(1), e(2).toInt)) .toDF("id", "name", "age") df.filter("id = 1").show() ``` 上述代码首先创建了一个SparkSession对象spark,然后获取其SparkContext对象sc。接下来,使用sc.textFile()方法读取文件并创建一个RDD对象textFile。然后,使用map()方法将每一行字符串分割成为一个字符串数组,并将其转换为一个Tuple对象,以便后续的转换。最后,使用toDF()方法将RDD转换为DataFrame。 在得到DataFrame之后,可以直接使用DataFrame的filter()方法筛选出id为1的记录。最后,调用show()方法输出结果。 需要说明的是,如果源文件中的内容不规范,如数据之间的分隔符不是逗号,可能需要根据实际情况对代码进行一些调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值