pyspark学习_dataframe常用操作_01

1. 创建DataFrame

   本文使用DataFrame通过读取json文件获取数据,代码如下:

    

from pyspark.sql import SparkSession

spark = SparkSeesion.builder.getOrCreate() #创建sparkSession 

peopleDF = spark.read.format("json").load("people.json") 
"""
spark支持读取多种文件格式:text/json/parquet     
path:文件路径  type:格式类型               返回DataFrame类型
spark.read.text(path)                       
spark.read.json(path)
spark.read.parquet(path)
spark.read.format("text").load(path)  
spark.read.format("json").load(path)  
spark.read.format("parquet").load(path)  
此外spark读取mysql等数据
spark.read.format("jdbc")\
          .option("driver","com.mysql.jdbc.Driver")\
          .option("url","jdbc:mysql://localhost:3306/spark")\
          .option("dbtable","people")\
          .option("user","root")\
          .option("password","root")\
          .load()
"""
"""
相对于读取文件,保存文件类似于读取文件,如下:
peopleDF.write.text(path)
peopleDF.write.json(path)
peopleDF.write.parquet(path)
peopleDF.write.format("text").save(path)
peopleDF.write.format("json").save(path)
peopleDF.write.format("parquet").save(path)
此外spark写入mysql数据
PROP = {}
PROP['driver'] = 'com.mysql.jdbc.Driver'
PROP['user'] = 'root'
PROP['password'] = 'root'
peopleDF.write.jdbc(url="jdbc:mysql://localhost:3306/spark",table="people",mode="append",properties=PROP)  
mode主要有两种模式:append:元数据保存,插入新数据 
overwrite:删除原有数据,插入新数据
"""
 2.  DataFrame常见操作
      2.1 printSchema
#printSchema:打印出DataFrame的模式
peopleDF.printSchema()

输出如下:
root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)
2.2 show 
#show:显示dataframe
"""
show(n) #控制输出行数
show(truncate=false) #不展示所有字段,如果truncate=true,则展示全部字段
show(n,truncate=true) #控制输出行数并不隐藏字段   truncate默认true
"""

peopleDF.show()

输出如下:
+---+----+
|age|name|
+---+----+
| 12| tom|
| 22|jack|
| 33| Bob|
+---+----+
2.3 select
#select:从DataFrame中选取部分列的数据
peopleDF.select(['name','age']).show()

peopleDF.select(peopleDF['name'],peopleDF['age']).show()

输出如下:
+----+---+
|name|age|
+----+---+
| tom| 12|
|jack| 22|
| Bob| 33|
+----+---+
2.4 groupBy 
#groupBy:对记录进行分组,一般后续和sum()/count()函数
peopleDF.groupBy('name').count().show()
+----+-----+
|name|count|
+----+-----+
|jack|    1|
| Bob|    1|
| tom|    1|
+----+-----+
2.5 filter
#filter:按条件对数据进行筛选
peopleDF.filter(peopleDF['age']>20).show()

输出如下:
+---+----+
|age|name|
+---+----+
| 22|jack|
| 33| Bob|
+---+----+
2.6 sort
#sort:对数据进行排序
peopleDF.sort(peopleDF['name'].asc(),peopleDF['age'].desc()).show()  
#按照name升序,如果name排序一致,按照age降序

输出如下:
+---+----+
|age|name|
+---+----+
| 33| Bob|
| 22|jack|
| 12| tom|
+---+----+
2.7 replace
#replace:替换内容
peopleDF.replace("Bob","Jane",subset=['name']).show() 
"""
将name字段为Bob改为Jane,如果不设置subset,则针对于整个DataFrame进行修改,注意此处不是substr()相等,而是需要字段等于Bob才进行replace
"""
输出如下:
+---+----+
|age|name|
+---+----+
| 12| tom|
| 22|jack|
| 33|Jane|
+---+----+
2.8 alias
#alias:设置别用名
peopleDF.select(peopleDF['name'].alias('username')).show()  #将name修改为username

输出如下:
+--------+
|username|
+--------+
|     tom|
|    jack|
|     Bob|
+--------+
2.9 withColumn
#withColumn:新增数据列
peopleDF_new = peopleDF.withColumn("test",peopleDF['age']/2)
peopleDF_new .show()

输出如下:
+---+----+-----------------+
|age|name|             test|
+---+----+-----------------+
| 12| tom|              4.0|
| 22|jack|7.333333333333333|
| 33| Bob|             11.0|
+---+----+-----------------+
2.10 foreach
#foreach:函数对每行数据计算
peopleDF.foreach(print)

输出如下:
Row(age=12, name='tom')
Row(age=22, name='jack')
Row(age=33, name='Bob')

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`flow_from_dataframe` 是 Keras 中用于从 Pandas DataFrame 中读取图像数据的方法,它可以方便地将 DataFrame 中的图像数据转换为 Keras 模型可以使用的数据流。使用 `flow_from_dataframe` 的步骤如下: 1. 导入必要的库: ```python import pandas as pd from tensorflow.keras.preprocessing.image import ImageDataGenerator ``` 2. 读取包含图像路径和标签的 Pandas DataFrame: ```python df = pd.read_csv('path_to_csv_file') ``` 其中,DataFrame 中应至少包含包含图像路径的列和标签的列。 3. 创建 ImageDataGenerator 对象,并调用 `flow_from_dataframe` 方法: ```python datagen = ImageDataGenerator(rescale=1./255) train_generator = datagen.flow_from_dataframe( dataframe=df, directory='path_to_directory_containing_images', x_col='image_path_col_name', y_col='label_col_name', target_size=(img_height, img_width), batch_size=batch_size, class_mode='categorical' ) ``` 其中,`rescale` 参数用于对图像进行缩放,`directory` 参数指定包含图像文件的目录路径,`x_col` 参数指定 DataFrame 中包含图像路径的列名,`y_col` 参数指定 DataFrame 中包含标签的列名,`target_size` 参数指定图像大小,`batch_size` 参数指定批大小,`class_mode` 参数指定标签的类型,可以是 `categorical` 或 `binary`。 4. 使用生成器训练 Keras 模型: ```python model.fit( train_generator, epochs=num_epochs, steps_per_epoch=num_train_steps, validation_data=val_generator, validation_steps=num_val_steps ) ``` 其中,`train_generator` 是通过 `flow_from_dataframe` 方法创建的训练数据生成器,`num_epochs` 指定训练的轮数,`num_train_steps` 指定训练集中的批次数,`val_generator` 是通过 `flow_from_dataframe` 方法创建的验证数据生成器,`num_val_steps` 指定验证集中的批次数。 这样,就可以使用 `flow_from_dataframe` 方法从 Pandas DataFrame 中读取图像数据并训练 Keras 模型了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值