【问题标题】:How to replace white space with comma in Spark ( with Scala)?如何在 Spark(使用 Scala)中用逗号替换空格?
【发布时间】:2019-04-28 13:20:24
【问题描述】:

我有一个这样的日志文件。我想在 Scala 中创建一个 DataFrame。

2015-05-13T23:39:43.945958Z my-loadbalancer 192.168.131.39:2817 10.0.0.1:80 0.000086 0.001048 0.001337 200 200 0 57 "GET https://www.example.com:443/ HTTP/1.1" "curl/7.38.0" DHE-RSA-AES128-SHA TLSv1.2

我想用逗号替换所有空格,以便我可以使用 spark.sql 但我无法这样做。

这是我尝试过的所有内容:

  1. 尝试先将其作为文本文件导入,看看是否有 replaceAll 方法。
  2. 尝试根据空间进行拆分。

任何建议。我浏览了文档,没有提到 Pandas 中的替换功能..

【问题讨论】:

标签: scala apache-spark apache-spark-sql databricks


【解决方案1】:

您可以简单地告诉 spark 您的分隔符是这样的空格:

val df = spark.read.option("delimiter", " ").csv("path/to/file")

【讨论】:

    【解决方案2】:

    由于您还没有输入列,我将从 RDD 开始,使用地图拆分文本,然后转换为带有架构的 Dataframe。 大致:

    val rdd = sc.textFile({logline path}).map(line=>line.split("\\s+"))
    

    然后您需要将您的 RDD(其中每条记录是一个令牌数组)转换为 Dataframe。最可靠的方法是将数组映射到 Row 对象,因为 RDD[Row] 是数据帧的基础。

    一种更简单的起床方式是

    spark.createDataFrame(rdd).toDF("datetime", "host", "ip", ...)
    

    【讨论】:

    • 几乎精确。谢谢。
    • 它也在替换引号内的空格。寻找克服它的方法。
    • 现在我想起来了,Spark 数据帧有一个 CSV 阅读器,使用它可能是有意义的
    • Scala CSV 阅读器:spark.apache.org/docs/2.1.0/api/scala/…*):org.apache.spark.sql.DataFrame
    • 我想使用它,但我的数据集是一组数组,我的意思是每一行都是一个数组,如上面的日志所示。所以我希望根据空间拆分所有内容,为列命名,然后对其执行 SQL。
    【解决方案3】:

    如果你只是想在空间上分割并将字符串保留在双引号内,你可以使用 apache.commons.csv 库。

    import org.apache.commons.csv.CSVParser._
    val str = """2015-05-13T23:39:43.945958Z my-loadbalancer 192.168.131.39:2817 10.0.0.1:80 0.000086 0.001048 0.001337 200 200 0 57 "GET https://www.example.com:443/ HTTP/1.1" "curl/7.38.0" DHE-RSA-AES128-SHA TLSv1.2"""
    val http = csv.CSVParser.parse(str,CSVFormat.newFormat(' ').withQuote('"')).getRecords.get(0).get(11)
    val curl = csv.CSVParser.parse(str,CSVFormat.newFormat(' ').withQuote('"')).getRecords.get(0).get(12)
    println(http)
    println(curl)
    

    结果:

    GET https://www.example.com:443/ HTTP/1.1
    curl/7.38.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 2013-12-10
      相关资源
      最近更新 更多