Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 将数据集[数据集[列]]展平到数据集[列]_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala 将数据集[数据集[列]]展平到数据集[列]

Scala 将数据集[数据集[列]]展平到数据集[列],scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我试图捕获数据库中所有表的元数据。我正在使用spark.catalogapi来提取元数据。我写了下面的方法 def getColumns(tables:Dataset[Table]): Dataset[Column] = { tables.map(table => spark.catalog.listColumns(table.name)) } 此方法返回Dataset[Dataset[Colums]]。如何将其转换为Dataset[Column],以便将其保存为配置单元中的表?请推

我试图捕获数据库中所有表的元数据。我正在使用
spark.catalog
api来提取元数据。我写了下面的方法

def getColumns(tables:Dataset[Table]): Dataset[Column] = {
  tables.map(table => spark.catalog.listColumns(table.name))
}

此方法返回
Dataset[Dataset[Colums]]
。如何将其转换为
Dataset[Column]
,以便将其保存为配置单元中的表?请推荐是否有其他有效的方法来捕获表的所有元数据。

谢谢您的回复。我需要捕获所有数据库表的所有列(如#2.Full info中所示),然后将其存储在一个配置单元表中。我可以在foreach循环中完成它,但它花费的时间太长,最终耗尽了驱动程序内存。我在一个数据库中有4000多个表。所以我想在表列表上运行一个映射,并将表名传递给spark.catalog.listColumns,然后将结果保存到dataframe中,我可以将其写入配置单元。但映射输出将是Dataset[Dataset[Column]]。所以我想将其展平/转换为Dataset[Column],请参见Hive Metastore。表:DBS、TBL、SDS、分区。。。所有表格=55。编辑我的答案。增加项目3。关于数据库表中列的所有信息。在您的方法中,请尝试使用flatMap。
    // 1. only column name

    val c1 = spark.catalog.listColumns("database-name.table-name").select('name)
    // c1: org.apache.spark.sql.DataFrame = [name: string]
    c1.printSchema
    // root
    //  |-- name: string (nullable = true)

    // 2. Full info
       

    val c1 = spark.catalog.listColumns("database-name.table-name")
    // c1: org.apache.spark.sql.Dataset[org.apache.spark.sql.catalog.Column] = [name: 
    string, description: string ... 4 more fields]

    c1.printSchema
    // root
    //  |-- name: string (nullable = true)
    //  |-- description: string (nullable = true)
    //  |-- dataType: string (nullable = true)
    //  |-- nullable: boolean (nullable = false)
    //  |-- isPartition: boolean (nullable = false)
    //  |-- isBucket: boolean (nullable = false)

// 3. All info about columns in tables database
    import org.apache.spark.sql.functions._

val dbName = "set database name"

val listTables = spark.catalog.listTables(dbName)
  .select('name).as[String]
  .collect().toList

val listDF = listTables.map(t => {
  val colsDF = spark.catalog.listColumns(dbName, t)
    .withColumn("namneTable", lit(t))
    .withColumn("dbName", lit(dbName))

  colsDF
})

val resDF = listDF.reduce(_ union _)

resDF.printSchema
//  root
//  |-- name: string (nullable = true)
//  |-- description: string (nullable = true)
//  |-- dataType: string (nullable = true)
//  |-- nullable: boolean (nullable = false)
//  |-- isPartition: boolean (nullable = false)
//  |-- isBucket: boolean (nullable = false)
//  |-- namneTable: string (nullable = false)
//  |-- dbName: string (nullable = false)

resDF.write.format("parquet").saveAsTable(.....)