我在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();
以上代码完美无缺。我的数据集的列名是:firstName
和lastName
。我希望输出数据/镶木地板文件的列名为first_name
和last_name
。有没有一种简单的方法可以通过添加另一个选项来实现?如果没有,如果在运行此代码片段时未知列名称,最简单的方法是什么?
答案 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()
})