有没有办法从 Scala 中数据框的现有列创建多个列?

元数据

我正在尝试将 RDBMS 表摄取到 Hive 中。我通过以下方式获得了数据框:

val yearDF = spark.read.format("jdbc").option("url", connectionUrl)
                                                   .option("dbtable", "(select * from schema.tablename where source_system_name='DB2' and period_year='2017') as year2017")
                                                   .option("user", devUserName)
                                                   .option("password", devPassword)
                                                   .option("numPartitions",15)
                                                   .load()

这些是数据框的列:

geography:string|
project:string|
reference_code:string
product_line:string
book_type:string
cc_region:string
cc_channel:string
cc_function:string
pl_market:string
ptd_balance:double
qtd_balance:double
ytd_balance:double
xx_last_update_tms:timestamp
xx_last_update_log_id:int
xx_data_hash_code:string
xx_data_hash_id:bigint

ptd_balance, qtd_balance, ytd_balance是双精度列的双数据类型。我们的项目希望通过创建新列将它们的数据类型从 Double 转换为 String:ptd_balance_text, qtd_balance_text, ytd_balance_text使用相同的数据以避免任何数据截断。

withColumn将在数据框中创建一个新列。withColumnRenamed将重命名现有列。

该数据框有近 1000 万条记录。有没有一种有效的方法来创建多个具有相同数据和不同类型的新列与数据帧中的现有列?

精神

如果我处于您的位置,我会在提取查询中进行更改或要求 BI 团队付出一些努力:P在提取时动态添加和投射字段,但是您所要求的任何方式都是可能的。

您可以从现有列中添加列,如下所示。检查addColsTosampleDF dataframe. 我希望下面的评论足以理解,如果您有任何问题,请随时添加评论,我会编辑我的答案。

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

scala> import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

scala> val ss = SparkSession.builder().appName("TEST").getOrCreate()
18/08/07 15:51:42 WARN SparkSession$Builder: Using an existing SparkSession; some configuration may not take effect.
ss: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@6de4071b

//Sample dataframe with int, double and string fields
scala> val sampleDf = Seq((100, 1.0, "row1"),(1,10.12,"col_float")).toDF("col1", "col2", "col3")
sampleDf: org.apache.spark.sql.DataFrame = [col1: int, col2: double ... 1 more field]

scala> sampleDf.printSchema
root
 |-- col1: integer (nullable = false)
 |-- col2: double (nullable = false)
 |-- col3: string (nullable = true)

//Adding columns col1_string from col1 and col2_doubletostring from col2 with casting and alias
scala> val addColsTosampleDF = sampleDf.
select(sampleDf.col("col1"),
sampleDf.col("col2"),
sampleDf.col("col3"),
sampleDf.col("col1").cast("string").alias("col1_string"),
sampleDf.col("col2").cast("string").alias("col2_doubletostring"))
addColsTosampleDF: org.apache.spark.sql.DataFrame = [col1: int, col2: double ... 3 more fields]

//Schema with added columns
scala> addColsTosampleDF.printSchema
root
 |-- col1: integer (nullable = false)
 |-- col2: double (nullable = false)
 |-- col3: string (nullable = true)
 |-- col1_string: string (nullable = false)
 |-- col2_doubletostring: string (nullable = false)

 scala> addColsTosampleDF.show()
+----+-----+---------+-----------+-------------------+
|col1| col2|     col3|col1_string|col2_doubletostring|
+----+-----+---------+-----------+-------------------+
| 100|  1.0|     row1|        100|                1.0|
|   1|10.12|col_float|          1|              10.12|
+----+-----+---------+-----------+-------------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Spark / Scala,有没有办法结合复杂的数据结构?

来自分类Dev

有没有办法在ipython笔记本中运行scala代码?

来自分类Dev

有没有办法在scala js文件中使用Play路由?

来自分类Dev

有没有办法在Scala中提供自定义编译错误消息?

来自分类Dev

有没有办法使用eclipse执行scala类?

来自分类Dev

有没有办法从 Scala 中的给定数组创建 n 个元素的 subArray 块?

来自分类Dev

使用Scala中数据框中的现有数据在数据框中创建arraytype列

来自分类Dev

有没有办法一次减去多个数据框列?

来自分类Dev

有没有办法遍历熊猫数据框?

来自分类Dev

有没有办法在熊猫数据框中识别行实际包含数据的列

来自分类Dev

有没有办法在熊猫数据框的多列中修剪/剥离空格?

来自分类Dev

有没有办法在 manim 中创建散点图?

来自分类Dev

有没有办法缩短多个.next()?

来自分类Dev

有没有办法从单独的行创建数组?

来自分类Dev

有没有办法保护Covergroup Bins的创建

来自分类Dev

有没有办法阻止创建给定文件?

来自分类Dev

有没有办法自动创建 TeamCity 项目?

来自分类Dev

有没有办法批量创建word文档

来自分类Dev

有没有办法让蟾蜍定期刷新数据

来自分类Dev

有没有办法在Hive中转置数据

来自分类Dev

有没有办法重用数据注释?

来自分类Dev

有没有办法保存反应角色数据?

来自分类Dev

有没有办法表示休眠的数据视图?

来自分类Dev

有没有办法加入数据表?

来自分类Dev

有没有办法按数据取消分组

来自分类常见问题

有没有办法在PHP中扩展特征?

来自分类Dev

有没有办法清除JavaScript中的对象?

来自分类Dev

有没有办法重置Angular中的$ touched?

来自分类Dev

有没有办法在leveldb中更改键?

Related 相关文章

  1. 1

    使用Spark / Scala,有没有办法结合复杂的数据结构?

  2. 2

    有没有办法在ipython笔记本中运行scala代码?

  3. 3

    有没有办法在scala js文件中使用Play路由?

  4. 4

    有没有办法在Scala中提供自定义编译错误消息?

  5. 5

    有没有办法使用eclipse执行scala类?

  6. 6

    有没有办法从 Scala 中的给定数组创建 n 个元素的 subArray 块?

  7. 7

    使用Scala中数据框中的现有数据在数据框中创建arraytype列

  8. 8

    有没有办法一次减去多个数据框列?

  9. 9

    有没有办法遍历熊猫数据框?

  10. 10

    有没有办法在熊猫数据框中识别行实际包含数据的列

  11. 11

    有没有办法在熊猫数据框的多列中修剪/剥离空格?

  12. 12

    有没有办法在 manim 中创建散点图?

  13. 13

    有没有办法缩短多个.next()?

  14. 14

    有没有办法从单独的行创建数组?

  15. 15

    有没有办法保护Covergroup Bins的创建

  16. 16

    有没有办法阻止创建给定文件?

  17. 17

    有没有办法自动创建 TeamCity 项目?

  18. 18

    有没有办法批量创建word文档

  19. 19

    有没有办法让蟾蜍定期刷新数据

  20. 20

    有没有办法在Hive中转置数据

  21. 21

    有没有办法重用数据注释?

  22. 22

    有没有办法保存反应角色数据?

  23. 23

    有没有办法表示休眠的数据视图?

  24. 24

    有没有办法加入数据表?

  25. 25

    有没有办法按数据取消分组

  26. 26

    有没有办法在PHP中扩展特征?

  27. 27

    有没有办法清除JavaScript中的对象?

  28. 28

    有没有办法重置Angular中的$ touched?

  29. 29

    有没有办法在leveldb中更改键?

热门标签

归档