spark sql常见操作(updating)

本文展示了如何使用Spark SQL进行数据处理,包括读取Parquet文件、创建用户定义函数(UDF)以及数据分组与聚合操作。示例中,通过UDF将数值转换为描述性字符串,并演示了如何在DataFrame上添加新列。同时,还涵盖了数据写入Parquet格式和数据帧的简单操作。
摘要由CSDN通过智能技术生成
import org.apache.spark.sql.functions._ val myDF = sqlContext.parquetFile("hdfs:/to/my/file.parquet") val coder: (Int => String) = (arg: Int) => {if (arg < 100) "little" else "big"} val sqlfunc = udf(coder) myDF.withColumn("Code", sqlfunc(col("Amt")))

(1 to minusHours).toDF("hour_num").withColumn("a", datediff(current_date, current_date)).show


import org.apache.spark.sql.types._
import org.apache.spark.sql.{DataFrame, Row, SQLContext}

val schema =
          StructType(
            StructField("imps", IntegerType, true) ::
              StructField("clks", LongType, true) :: Nil)

val row1 = Row(1, 2)
val row2 = Row(2, 3)
val row3 = Row(2, 2)
val row4 = Row(3, 3)
val row5 = Row(3, 2)
val row6 = Row(3, 3)
val row7 = Row(4, 2)
val row8 = Row(5, 3)

val df = sqlContext.createDataFrame(sc.parallelize(List(row1,row2,row3,row4,row5,row6,row7,row8)), schema)

df.groupBy("imps").agg(count("imps")).show

+----+-----------+

|imps|COUNT(imps)|

+----+-----------+

|   1|          1|

|   2|          2|

|   3|          3|

|   4|          1|

|   5|          1|

+----+-----------+

==============================================

import org.apache.spark.sql.functions._

val myDF = sqlContext.parquetFile("hdfs:/to/my/file.parquet")
val coder: (Int => String) = (arg: Int) => {if (arg < 100) "little" else "big"}
val sqlfunc = udf(coder)

myDF.withColumn("Code", sqlfunc(col("Amt")))

I think withColumn is the right way to add a column  

but that fail at v1.4.1

======

​
import org.apache.spark.sql.types._

import org.apache.spark.sql.{DataFrame, Row, SQLContext}

val schema =

          StructType(

            StructField("imps", LongType, true) ::

              StructField("clks", LongType, true) ::

              StructField("cost", DoubleType, true) ::

              StructField("spending", DoubleType, true) :: Nil)

//        val people =

//          sc.textFile("examples/src/main/resources/people.txt").map(

//            _.split(",")).map(p => Row(p(0), p(1).trim.toInt))

       val row = Row(null, null, null, null)

        val row = Row(null, null, null, null)

        val dataFrame = sqlContext.createDataFrame(sc.parallelize(List(row)), schema)

        dataFrame.write.parquet(savePath)

val schema2 =

          StructType(

            StructField("id", StringType, true) :: Nil)

val row = Row("1")

val d2 = sqlContext.createDataFrame(sc.parallelize(List(row)), schema)

d1.withColumn("c2",d2.col("id"))          ==> That no use!!!

case classUserDefinedFunction(f: AnyRef, dataType: DataType) extends Product with Serializable

Experimental

A user-defined function. To create one, use the udf functions in functions. As an example:

import sqlContext._

// Defined a UDF that returns true or false based on some numeric score.

val predict = udf((score: Double) => if (score > 0.5) true else false)

// Projects a column that adds a prediction column based on the score column.

df.select( predict(df("score")) )

That`s succes!!

import sqlContext.implicits._     //下边代码中 "$" 才能被识别出来

dfOffline.select($"member_id", formatDate($"create_time") as "costDate", memberCastOneDay($"goods_price", $"goods_num") as "cost").registerTempTable("tmpMiddleData1")

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大怀特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值