在使用Spark编写数据集时,如何将带有下划线的驼峰列名修改为小写?

时间:2018-05-11 23:42:52

标签: java apache-spark apache-spark-sql spark-structured-streaming

我在Spark 2.3.0中使用Structured Streaming将数据集写入S3。我的流媒体查询如下所示:

StreamingQuery query = ds.writeStream().format("parquet").outputMode(OutputMode.Append())
                                       .option("checkpointLocation", "s3://my-checkpoint-location/" )
                                       .option("path", "s3://my-output-data-location")
                                       .partitionBy("my-partition-column-name")
                                       .start();

以上代码完美无缺。我的数据集的列名是:firstNamelastName。我希望输出数据/镶木地板文件的列名为first_namelast_name。有没有一种简单的方法可以通过添加另一个选项来实现?如果没有,如果在运行此代码片段时未知列名称,最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以这样做:

...
    for (colName <- df.columns)
      df = df.withColumnRenamed(colName, camelToUnderscores(colName))
...

def camelToUnderscores(name: String) = "[A-Z\\d]".r.replaceAllIn(name, {m =>
    "_" + m.group(0).toLowerCase()
})