Расширение по спектному ответу. С поддержкой типов массивов:
object DataFrameUtils {
private def dropSubColumn(col: Column, colType: DataType, fullColName: String, dropColName: String): Option[Column] = {
if (fullColName.equals(dropColName)) {
None
} else if (dropColName.startsWith(s"$fullColName.")) {
colType match {
case colType: StructType =>
Some(struct(
colType.fields
.flatMap(f =>
dropSubColumn(col.getField(f.name), f.dataType, s"$fullColName.${f.name}", dropColName) match {
case Some(x) => Some(x.alias(f.name))
case None => None
})
: _*))
case colType: ArrayType =>
colType.elementType match {
case innerType: StructType =>
Some(struct(innerType.fields
.flatMap(f =>
dropSubColumn(col.getField(f.name), f.dataType, s"$fullColName.${f.name}", dropColName) match {
case Some(x) => Some(x.alias(f.name))
case None => None
})
: _*))
}
case other => Some(col)
}
} else {
Some(col)
}
}
protected def dropColumn(df: DataFrame, colName: String): DataFrame = {
df.schema.fields
.flatMap(f => {
if (colName.startsWith(s"${f.name}.")) {
dropSubColumn(col(f.name), f.dataType, f.name, colName) match {
case Some(x) => Some((f.name, x))
case None => None
}
} else {
None
}
})
.foldLeft(df.drop(colName)) {
case (df, (colName, column)) => df.withColumn(colName, column)
}
}
/**
* Extended version of DataFrame that allows to operate on nested fields
*/
implicit class ExtendedDataFrame(df: DataFrame) extends Serializable {
/**
* Drops nested field from DataFrame
*
* @param colName Dot-separated nested field name
*/
def dropNestedColumn(colName: String): DataFrame = {
DataFrameUtils.dropColumn(df, colName)
}
}
}
Этот инструмент переформатировал код SQL. Я использовал его с потрясающими результатами. Это свободно как веб-приложение и имеет загружаемую версию также.
Эти хорошие взгляды.
также существует это.
http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl
Не то, чтобы я рекомендую потратить (относительно большие) деньги на него для просто этой цели, но Жабе создали функцию в этом, делает точно, что Вы желаете.
Это включает набор опций, разрешающих Вам настраивать точно, как Вы хотите свой отформатированный SQL (все столбцы на отдельных строках, и т.д.). Довольно хороший, но только если Вы уже получили Жабу. Я знаю, что версия Oracle делает это, но я принял бы SQL Server, или другие версии будут также.
Мне нравится использовать http://www.dpriver.com - это прекрасное дополнение к SQL Server Management Studio.