0.前次作业:从文件创建DataFrame

1.pandas df 与 spark df的相互转换     df_s=spark.createDataFrame(df_p)     df_p=df_s.toPandas()

# 从数组创建pandas dataframe
import pandas as pd
import numpy as np
arr = np.arange(6).reshape(-1,3)
arr
df_p = pd.DataFrame(arr)
df_p
df_p.columns = ['a','b','c']
df_p

# pandas df 转为spark df
df_s = spark.createDataFrame(df_p)
df_s.show()
df_s.collect()

# spark df 转为pandas df
df_s.show()
df_s.toPandas()

2. Spark与Pandas中DataFrame对比

http://www.lining0806.com/spark%E4%B8%8Epandas%E4%B8%ADdataframe%E5%AF%B9%E6%AF%94/

3.1 利用反射机制推断RDD模式

  • sc创建RDD
spark.sparkContext.textFile("file:///D:/Spark/spark-2.4.7-bin-hadoop2.7/examples/src/main/resources/people.txt").first()
spark.sparkContext.textFile("file:///D:/Spark/spark-2.4.7-bin-hadoop2.7/examples/src/main/resources/people.txt")\
.map(lambda line:line.split(',')).first()

  • 转换成Row元素,列名=值
from pyspark.sql import Row
people = spark.sparkContext.textFile("file:///D:/Spark/spark-2.4.7-bin-hadoop2.7/examples/src/main/resources/people.txt")\
.map(lambda line:line.split(','))\
.map(lambda p:Row(name=p[0],age=int(p[1])))
  • spark.createDataFrame生成df
schemaPeople = spark.createDataFrame(people)

  • df.show(), df.printSchema()
schemaPeople.show()
schemaPeople.printSchema()

3.2 使用编程方式定义RDD模式

  • 生成“表头”

    • fields = [StructField(field_name, StringType(), True) ,...]
    • schema = StructType(fields)
from pyspark.sql.types import StringType,StructField,StructType
from pyspark.sql import Row #生成“表头”
schemaString = "name age"
fields = [StructField(field_name,StringType(),True) for field_name in schemaString.split(" ")]
schema = StructType(fields)

  • 生成“表中的记录”

    • 创建RDD
    • 转换成Row元素,列名=值
# 生成“表中的记录”
lines = spark.sparkContext.textFile("file:///D:/Spark/spark-2.4.7-bin-hadoop2.7/examples/src/main/resources/people.txt")
parts = lines.map(lambda x:x.split(","))
people = parts.map(lambda p:Row(p[0],p[1].strip()))
people.collect()

  • 把“表头”和“表中的记录”拼装在一起

    • = spark.createDataFrame(RDD, schema)
# 把“表头”和“表中的记录”拼接在一起
schemaPeople = spark.createDataFrame(people,schema)
schemaPeople.show()
schemaPeople.printSchema()

4. DataFrame保存为文件

df.write.json(dir)

schemaPeople.write.json("file:///D:/Demo/schemaPeople")

预练习:

读 学生课程分数文件chapter4-data01.txt,创建DataFrame。并尝试用DataFrame的操作完成实验三的数据分析要求。

1.利用反射机制推断RDD模式

from pyspark.sql import Row
people = spark.sparkContext.textFile("file:///D:/chapter4-data01.txt")\
.map(lambda line:line.split(','))\
.map(lambda p:Row(name=p[0],course=p[1],score=int(p[2]))) df = spark.createDataFrame(people)
people
df

people.first()
df.show()
df.printSchema()

2.使用编程方式定义RDD模式

url = "file:///D:/chapter4-data01.txt"
rdd = sc.textFile(url).map(lambda line:line.split(','))
rdd.take(3)

from pyspark.sql.types import IntegerType,StringType,StructField,StructType
from pyspark.sql import Row #生成“表头”
schemaString = "name course score"
fields = [StructField(field_name,StringType(),True) for field_name in schemaString.split(" ")]
schema = StructType(fields)
fields
schema

# 生成“表中的记录”
lines = spark.sparkContext.textFile("file:///D:/chapter4-data01.txt")
parts = lines.map(lambda x:x.split(","))
people = parts.map(lambda p:Row(p[0],p[1],p[2].strip()))
people.collect()

# 把“表头”和“表中的记录”拼接在一起
schemaPeople = spark.createDataFrame(people,schema)
schemaPeople.show()
schemaPeople.printSchema()

从RDD创建DataFrame的更多相关文章

  1. 07 从RDD创建DataFrame

    1.pandas df 与 spark df的相互转换 df_s=spark.createDataFrame(df_p) df_p=df_s.toPandas() 2. Spark与Pandas中Da ...

  2. 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式

    一.前述       1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...

  3. Spark SQL初始化和创建DataFrame的几种方式

    一.前述       1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...

  4. JAVA SparkSQL初始和创建DataFrame的几种方式

    建议参考SparkSQL官方文档:http://spark.apache.org/docs/latest/sql-programming-guide.html 一.前述       1.SparkSQ ...

  5. 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户

    1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...

  6. RDD、DataFrame和DataSet的区别

    原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD ...

  7. RDD与DataFrame的转换

    RDD与DataFrame转换1. 通过反射的方式来推断RDD元素中的元数据.因为RDD本身一条数据本身是没有元数据的,例如Person,而Person有name,id等,而record是不知道这些的 ...

  8. 谈谈RDD、DataFrame、Dataset的区别和各自的优势

    在spark中,RDD.DataFrame.Dataset是最常用的数据类型,本博文给出笔者在使用的过程中体会到的区别和各自的优势 共性: 1.RDD.DataFrame.Dataset全都是spar ...

  9. spark RDD,DataFrame,DataSet 介绍

    弹性分布式数据集(Resilient Distributed Dataset,RDD) RDD是Spark一开始就提供的主要API,从根本上来说,一个RDD就是你的数据的一个不可变的分布式元素集合,在 ...

  10. Spark提高篇——RDD/DataSet/DataFrame(二)

    该部分分为两篇,分别介绍RDD与Dataset/DataFrame: 一.RDD 二.DataSet/DataFrame 该篇主要介绍DataSet与DataFrame. 一.生成DataFrame ...

随机推荐

  1. 谁能真正替代你?AI辅助编码工具深度对比(chatGPT/Copilot/Cursor/New Bing)

    写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了,作为一个被裹挟在AI时代浪潮中的程序员,在这几个月里我也是异常兴奋和焦虑.甚至都兴奋的不想拖更了.不仅仅兴奋于AI对于我们生产力的全面提升,也 ...

  2. 关于微人事中POI导入文件到数据库的异常以及自己的一些技术心得

    前言 在近四个月的时间里面,我的微人事项目才逐渐接近尾声,在昨天的测试接口中出现了两次数组越界以及一次空指针异常,三处异常我都通过吊事bug根据项目实际情况解决了,但是在空指针异常那里还是带有疑问,起 ...

  3. vs的常用配置【以及vs常用的快捷键】

    1.颜色设置 (1) 编译器的主题颜色设置 (2) 字体和颜色设置 (3) 字体大小 更快捷的修改字体大小方式:ctr+鼠标滚轮 2.行号设置 默认就有,不用设置了 3.把解决方案资源管理器移动到左边 ...

  4. 【SSM项目】尚筹网(五)项目改写:使用前后端分离的SpringSecurityJWT认证

    在项目中加入SpringSecurity 1 加入依赖 <!-- SpringSecurity --> <dependency> <groupId>org.spri ...

  5. RDIFramework.NET开发框架在线表单设计助力可视化快速开发

    1.概述 RDIFramework.NET在线表单是易于使用的在线表单设计组件,为快速开发企业应用,流程应用等快速在线设计表单和收集数据提供支持.例如可设计一些订单信息表.客户信息表等,是所见即所得的 ...

  6. KMeans算法与GMM混合高斯聚类

    一.K-Means K-Means是GMM的特例(硬聚类,基于原型的聚类).假设多元高斯分布的协方差为0,方差相同.   K-Means算法思想 对于给定的样本集,按照样本之间的距离大小,将样本集划分 ...

  7. VScode连接GPU服务器进行深度学习

    VScode连接GPU服务器进行深度学习 ​ 最近用台式机跑一些小的深度学习项目,发现越来越慢了,由于一些原因,有时候需要我进行现场作业但是我的笔记本是轻薄本(Thinkpad YYDS)不带显卡,百 ...

  8. day02-2-商铺查询缓存

    功能02-商铺查询缓存 3.商铺详情缓存查询 3.1什么是缓存? 缓存就是数据交换的缓冲区(称作Cache),是存储数据的临时地方,一般读写性能较高. 缓存的作用: 降低后端负载 提高读写效率,降低响 ...

  9. Html/css 列表项 区分列表首尾

    列表项,有时需要判断列表首尾,来筛选设置样式 如上图,三个项有间隔,怎么保证设置了列表项之间的距离后,整体还水平居中显示呢? .item:not(:first-child) { margin-left ...

  10. 痞子衡嵌入式:聊聊i.MXRT1xxx上第三级启动保障 - SDMMC manufacture模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx上第三级启动保障 - SDMMC manufacture模式. 如果你在 i.MXRT1xxx 板卡上尝试过从 SD ...