• 博客园Logo
  • 会员
  • 新闻
  • 博问
  • 闪存
  • 班级
  • AI培训
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 简洁模式 ... 退出登录
    注册 登录

中药红

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

从RDD创建DataFrame

1.pandas df 与 spark df的相互转换

df_s=spark.createDataFrame(df_p)

df_p=df_s.toPandas()

 

import pandas as pd

import numpy as np

arr = np.arange(9).reshape(-1,3)

arr

df_p = pd.DataFrame(arr)

df_p

 

df_p.columns = ['A','B','C']

df_p

df_s = spark.createDataFrame(df_p)

df_s.show()

 

df_s.collect()

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
  • 转换成Row元素,列名=值
  • spark.createDataFrame生成df
  • df.show(), df.printSchema()

from pyspark.sql import Row

people = spark.sparkContext.textFile('file:///usr/local/spark/examples/src/main/resources/people.txt').map(lambda line:line.split(',')).map(lambda w:Row(name=w[0],age=int(w[1])))

sPeople = spark.createDataFrame(people)

sPeople.createOrReplaceTempView('people')

personDF = spark.sql('select name,age from people where age>20')

personRDD = personDF.rdd.map(lambda p:"Name:"+p.name+","+"Age:"+str(p.age))

personRDD.foreach(print)

sPeople.show()

sPeople.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)

      fields

      schema

       

  • 生成“表中的记录”
    • 创建RDD
    • 转换成Row元素,列名=值
    • lines = spark.sparkContext.textFile('file:///usr/local/spark/examples/src/main/resources/people.txt')

    • part = lines.map(lambda w:w.split(","))

    • peoples = part.map(lambda p:Row(p[0],p[1].strip()))

    • peoples.collect()

  • 把“表头”和“表中的记录”拼装在一起
    • = spark.createDataFrame(RDD, schema)

schemaPeople = spark.createDataFrame(people,schema)

schemaPeople.show()

schemaPeople.printSchema()

 

 

 4. DataFrame保存为文件

 df.write.json(dir)

 

schemaPeople.write.json('file:///home/hadoop/schema_out')

 

posted on 2021-05-13 20:18  中药红  阅读(90)  评论(0)  编辑  收藏  举报

会员救园
刷新页面返回顶部
 
Powered by:
博客园
Copyright © 2023 中药红
Powered by .NET 8.0 on Kubernetes