Spark通过三种方式创建DataFrame

通过toDF方法创建DataFrame

通过toDF的方法创建

  • 集合rdd中元素类型是样例类的时候,转成DataFrame之后列名默认是属性名
  • 集合rdd中元素类型是元组的时候,转成DataFrame之后列名默认就是_N
  • 集合rdd中元素类型是元组/样例类的时候,转成DataFrame(toDF("ID","NAME","SEX","AGE6"))可以自定义列名
csharp 复制代码
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.junit.Test


case class Person(id:Int,name:String,sex:String,age:Int)
class TestScala {

  val spark = SparkSession
    .builder()
    .appName("test")
    .master("local[4]")
    .getOrCreate()
    import spark.implicits._

  /**
   * 通过toDF的方法创建
   *    集合rdd中元素类型是样例类的时候,转成DataFrame之后列名默认是属性名
   *    集合rdd中元素类型是元组的时候,转成DataFrame之后列名默认就是_N
   */
  @Test
  def createDataFrameByToDF():Unit={
    //TODO 样例类是属性名
    val list = List(Person(1,"zhangsan","man",10),Person(2,"zhang2","woman",66),Person(3,"zhang3","man",70),Person(4,"zhang4","man",22))
    //需要隐士转换
    val df:DataFrame = list.toDF()
    df.show()
    //TODO 元祖是_N
    val list2 = List((1,"zhangsan","man",10),(1,"zhang2","woman",66),(1,"zhang3","man",70),(1,"zhang4","man",22))
    //需要隐士转换
    val df1:DataFrame = list2.toDF()
    df1.show()
    //TODO 自定义属性名
    val list3 = List((1,"zhangsan","man",10),(1,"zhang2","woman",66),(1,"zhang3","man",70),(1,"zhang4","man",22))
    //需要隐士转换
    val df2:DataFrame = list3.toDF("ID","NAME","SEX","AGE6")
    df2.show()
  }
  
  
}

结果

通过读取文件创建DataFrame

json数据

csharp 复制代码
{"age":20,"name":"qiaofeng"}
{"age":19,"name":"xuzhu"}
{"age":18,"name":"duanyu"}
csharp 复制代码
  /**
   * 通过读取文件创建
   */
  @Test
  def createDataFrame():Unit={
    val df = spark.read.json("src/main/resources/user.json")
    df.show()
  }

通过createDataFrame方法创建DF

csharp 复制代码
  @Test
  def createDataFrameByMethod():Unit={
    val fields = Array(StructField("id",IntegerType),StructField("name",StringType),StructField("sex",StringType),StructField("age",IntegerType))
    val schema = StructType(fields)
    val rdd = spark.sparkContext.parallelize(List(Row(1, "zhangsan", "man", 10), Row(2, "zhang2", "woman", 66), Row(3, "zhang3", "man", 70), Row(4, "zhang4", "man", 22)))
    val df = spark.createDataFrame(rdd, schema)
    df.show()
  }
相关推荐
TM1Club7 小时前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
zhang133830890757 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
电商API_180079052479 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
龙山云仓9 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
躺柒10 小时前
读数字时代的网络风险管理:策略、计划与执行04风险指引体系
大数据·网络·信息安全·数字化·网络管理·网络风险管理
独自归家的兔12 小时前
从 “局部凑活“ 到 “全局最优“:AI 规划能力的技术突破与产业落地实践
大数据·人工智能
海域云-罗鹏12 小时前
国内公司与英国总部数据中心/ERP系统互连,SD-WAN专线实操指南
大数据·数据库·人工智能
策知道13 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
Henry-SAP13 小时前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
冷崖14 小时前
消息队列-kafka(一)
分布式·kafka