三种语言实现spark createDataFrame

前言

我们经常需要在本地用数组写一些测试数据,进行spark逻辑测试,需要借助StructType和StructField以及数组生成DataFrame,最终进行测试,这里就简单的用Java、Scala、Python三种语言实现用数组的数据创建DataFrame。

了解StructType和StructField

  • StructType
    spark structtype是Spark中的数据结构,用于定义数据集中的结构化数据(如表格数据)的模式。它是一种由多个StructField对象组成的有序列表,每个StructField对象描述了数据集中的一个字段的名称、数据类型和是否可为空。
    我们可以使用StructType来创建和指定数据集的模式。以下是一个使用StructType定义模式的例子:

    import org.apache.spark.sql.types._
    
    val schema = new StructType()
      .add(StructField("name", StringType, nullable = false))
      .add(StructField("age", IntegerType, nullable = true))
      .add(StructField("city", StringType, nullable = true))
    

    在上述示例中,我们创建了一个包含三个字段的模式,分别是"name"(字符串类型,不可为空),“age”(整数类型,可为空)和"city"(字符串类型,可为空&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java实现: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import scala.Tuple2; public class SortByKeyDemo { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("SortByKeyDemo").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); // 创建RDD JavaRDD<String> lines = sc.parallelize(Arrays.asList("apple 3", "banana 2", "orange 1")); // 转换为JavaPairRDD JavaPairRDD<String, Integer> pairs = lines.mapToPair(line -> { String[] parts = line.split(" "); return new Tuple2<>(parts[0], Integer.parseInt(parts[1])); }); // 按照key排序 JavaPairRDD<String, Integer> sortedPairs = pairs.sortByKey(); // 输出结果 sortedPairs.foreach(tuple -> System.out.println(tuple._1 + " : " + tuple._2)); sc.stop(); } } ``` Scala实现: ```scala import org.apache.spark.{SparkConf, SparkContext} object SortByKeyDemo { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("SortByKeyDemo").setMaster("local") val sc = new SparkContext(conf) // 创建RDD val lines = sc.parallelize(Seq("apple 3", "banana 2", "orange 1")) // 转换为PairRDD val pairs = lines.map(line => { val parts = line.split(" ") (parts(0), parts(1).toInt) }) // 按照key排序 val sortedPairs = pairs.sortByKey() // 输出结果 sortedPairs.foreach(tuple => println(s"${tuple._1} : ${tuple._2}")) sc.stop() } } ``` Python实现: ```python from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("SortByKeyDemo").setMaster("local") sc = SparkContext(conf=conf) # 创建RDD lines = sc.parallelize(["apple 3", "banana 2", "orange 1"]) # 转换为PairRDD pairs = lines.map(lambda line: (line.split(" ")[0], int(line.split(" ")[1]))) # 按照key排序 sortedPairs = pairs.sortByKey() # 输出结果 sortedPairs.foreach(lambda tuple: print("{} : {}".format(tuple[0], tuple[1]))) sc.stop() ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunnyRivers

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值