在 Spark 上使用 Scala 拆分 Dataframe 中的字符串

大数据新手

我有一个包含 100 多列的日志文件。其中我只需要两列“_raw”和“_time”,所以我创建了将日志文件加载为“csv”DF。

步骤1:

scala> val log = spark.read.format("csv").option("inferSchema", "true").option("header", "true").load("soa_prod_diag_10_jan.csv")
log: org.apache.spark.sql.DataFrame = [ARRAffinity: string, CoordinatorNonSecureURL: string ... 126 more fields]

第 2 步:我将 DF 注册为临时表log.createOrReplaceTempView("logs"

第 3 步:我提取了两个必需的列“_raw”和“_time”

scala> val sqlDF = spark.sql("select _raw, _time from logs")
sqlDF: org.apache.spark.sql.DataFrame = [_raw: string, _time: string]

scala> sqlDF.show(1, false)
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----+
|_raw                                                                                                                                                                                                                                                                                                                                                                                                |_time|
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----+
|[2019-01-10T23:59:59.998-06:00] [xx_yyy_zz_sss_ra10] [ERROR] [OSB-473003] [oracle.osb.statistics.statistics] [tid: [ACTIVE].ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: 92b39a8b-8234-4d19-9ac7-4908dc79c5ed-0000bd0b,0] [partition-name: DOMAIN] [tenant-name: GLOBAL] Aggregation Server Not Available. Failed to get remote aggregator[[|null |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----+
only showing top 1 row

我的要求:

我需要拆分“_raw”列中的字符串以生成 [2019-01-10T23:59:59.998-06:00] [xx_yyy_zz_sss_ra10] [ERROR] [OSB-473003] [oracle.osb.statistics.statistics] [ ecid: 92b39a8b-8234-4d19-9ac7-4908dc79c5ed-0000bd0b] 列名分别为 a, b, c, d, e, f

同时从 '_raw' 和 '_time' 中删除所有空值

您的回答将不胜感激:)

阿普尔巴潘迪

您可以拆分函数,并按空间拆分 _raw。这将返回一个数组,然后您可以从该数组中提取值。您还可以使用 regexp_extract 函数从日志消息中提取值。两种方式如下所示。我希望它有帮助。

//Creating Test Data
val df = Seq("[2019-01-10T23:59:59.998-06:00] [xx_yyy_zz_sss_ra10] [ERROR] [OSB-473003] [oracle.osb.statistics.statistics] [tid: [ACTIVE].ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: 92b39a8b-8234-4d19-9ac7-4908dc79c5ed-0000bd0b,0] [partition-name: DOMAIN] [tenant-name: GLOBAL] Aggregation Server Not Available. Failed to get remote aggregator[[")
  .toDF("_raw")

val splitDF = df.withColumn("split_raw_arr", split($"_raw", " "))
  .withColumn("A", $"split_raw_arr"(0))
  .withColumn("B", $"split_raw_arr"(1))
  .withColumn("C", $"split_raw_arr"(2))
  .withColumn("D", $"split_raw_arr"(3))
  .withColumn("E", $"split_raw_arr"(4))
  .drop("_raw", "split_raw_arr")

splitDF.show(false)

+-------------------------------+--------------------+-------+------------+----------------------------------+
|A                              |B                   |C      |D           |E                                 |
+-------------------------------+--------------------+-------+------------+----------------------------------+
|[2019-01-10T23:59:59.998-06:00]|[xx_yyy_zz_sss_ra10]|[ERROR]|[OSB-473003]|[oracle.osb.statistics.statistics]|
+-------------------------------+--------------------+-------+------------+----------------------------------+

val extractedDF = df
  .withColumn("a", regexp_extract($"_raw", "\\[(.*?)\\]",1))
  .withColumn("b", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\]",2))
  .withColumn("c", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\]",3))
  .withColumn("d", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\]",4))
  .withColumn("e", regexp_extract($"_raw", "\\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\]",5))
  .withColumn("f", regexp_extract($"_raw", "(?<=ecid: )(.*?)(?=,)",1))
  .drop("_raw")

+-----------------------------+------------------+-----+----------+--------------------------------+---------------------------------------------+
|a                            |b                 |c    |d         |e                               |f                                            |
+-----------------------------+------------------+-----+----------+--------------------------------+---------------------------------------------+
|2019-01-10T23:59:59.998-06:00|xx_yyy_zz_sss_ra10|ERROR|OSB-473003|oracle.osb.statistics.statistics|92b39a8b-8234-4d19-9ac7-4908dc79c5ed-0000bd0b|
+-----------------------------+------------------+-----+----------+--------------------------------+---------------------------------------------+

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Scala在Apache Spark中拆分字符串

来自分类Dev

使用scala在spark中拆分由逗号和空格分隔的字符串

来自分类Dev

Spark Scala - 拆分字符串语法问题

来自分类Dev

展平任何嵌套的json字符串,并使用spark scala转换为dataframe

来自分类Dev

将Dataset中的嵌套json字符串转换为Spark Scala中的Dataset / Dataframe

来自分类Dev

使用Scala的解析器repsep拆分字符串

来自分类Dev

Spark Scala数据框中的列拆分

来自分类Dev

在Spark / Scala中组合字符串

来自分类Dev

如何在 Spark Dataframe 上的字符串中添加一列字符的索引?

来自分类Dev

在数据集Apache Spark中拆分字符串

来自分类Dev

如何将类似数组的字符串转换为 spark-dataframe (Scala api) 中的数组?

来自分类Dev

Scala字符串拆分商务

来自分类Dev

Scala-多重字符串拆分

来自分类Dev

在DataFrame中拆分字符串,仅保留某些部分

来自分类Dev

Spark结构化流时,DataFrame中的字符串列如何拆分为多个列

来自分类Dev

Java中的拆分字符串,在字符串部分中使用了潜在的拆分字符

来自分类Dev

Java中的拆分字符串,字符串部分中使用了潜在的拆分字符

来自分类Dev

使用Scala API将TSV读取到Spark Dataframe中

来自分类Dev

使用Scala在Spark DataFrame中从JSON重用架构

来自分类Dev

使用Scala在Spark sql Dataframe中读取歧义列名称

来自分类Dev

从Spark Scala DataFrame中选择名称包含特定字符串的列

来自分类Dev

Spark 2.2 Scala DataFrame 从字符串数组中选择,捕获错误

来自分类Dev

Spark Scala中的自定义字符串

来自分类Dev

Spark Scala中嵌套模式的字符串函数

来自分类Dev

如何使用scala通过spark中的一个或多个字符串参数传递selectExpr中的列名?

来自分类Dev

在Clojure中的反引号上拆分字符串

来自分类Dev

使用Scala将org.apache.spark.mllib.linalg.Vector RDD转换为Spark中的DataFrame

来自分类常见问题

在Spark Scala中重命名DataFrame的列名

来自分类Dev

Scala中Spark DataFrame的谐波均值

Related 相关文章

  1. 1

    使用Scala在Apache Spark中拆分字符串

  2. 2

    使用scala在spark中拆分由逗号和空格分隔的字符串

  3. 3

    Spark Scala - 拆分字符串语法问题

  4. 4

    展平任何嵌套的json字符串,并使用spark scala转换为dataframe

  5. 5

    将Dataset中的嵌套json字符串转换为Spark Scala中的Dataset / Dataframe

  6. 6

    使用Scala的解析器repsep拆分字符串

  7. 7

    Spark Scala数据框中的列拆分

  8. 8

    在Spark / Scala中组合字符串

  9. 9

    如何在 Spark Dataframe 上的字符串中添加一列字符的索引?

  10. 10

    在数据集Apache Spark中拆分字符串

  11. 11

    如何将类似数组的字符串转换为 spark-dataframe (Scala api) 中的数组?

  12. 12

    Scala字符串拆分商务

  13. 13

    Scala-多重字符串拆分

  14. 14

    在DataFrame中拆分字符串,仅保留某些部分

  15. 15

    Spark结构化流时,DataFrame中的字符串列如何拆分为多个列

  16. 16

    Java中的拆分字符串,在字符串部分中使用了潜在的拆分字符

  17. 17

    Java中的拆分字符串,字符串部分中使用了潜在的拆分字符

  18. 18

    使用Scala API将TSV读取到Spark Dataframe中

  19. 19

    使用Scala在Spark DataFrame中从JSON重用架构

  20. 20

    使用Scala在Spark sql Dataframe中读取歧义列名称

  21. 21

    从Spark Scala DataFrame中选择名称包含特定字符串的列

  22. 22

    Spark 2.2 Scala DataFrame 从字符串数组中选择,捕获错误

  23. 23

    Spark Scala中的自定义字符串

  24. 24

    Spark Scala中嵌套模式的字符串函数

  25. 25

    如何使用scala通过spark中的一个或多个字符串参数传递selectExpr中的列名?

  26. 26

    在Clojure中的反引号上拆分字符串

  27. 27

    使用Scala将org.apache.spark.mllib.linalg.Vector RDD转换为Spark中的DataFrame

  28. 28

    在Spark Scala中重命名DataFrame的列名

  29. 29

    Scala中Spark DataFrame的谐波均值

热门标签

归档