从 Schema Scala 中提取列详细信息和类型
Extracting Column Details & Type from Schema Scala
我正在使用 AWS EMR v5.29.0 Spark v2.4.4 和 Scala v2.11.12。
我正在使用推断模式方法读取文件,并使用以下代码创建包含列名和列名数据类型的数据框
val df = spark.read.options(Map("inferSchema"->"true","header"->"true")).csv("s3://bucket-name/File_Name.csv")
val columnList = df.schema.fields.map(field => (field.name, field.dataType.typeName)).toList.toDF("column_name","datatype")
当我执行 df.printSchema() 时,输出如下。
df.printSchema()
Output:
root
|-- ABC|EFG|IJK|LMN: string (nullable = true)
当我在做 columnList.show()
输出如下
+--------------------+--------+
| column_name|datatype|
+--------------------+--------+
|ABC|EFG|IJK|LMN | string|
+--------------------+--------+
所需的输出如下所示。
+---------------+--------+
|column_name |datatype|
+---------------+--------+
|ABC |string |
|EFG |string |
|IJK |string |
|LMN |string |
+---------------+--------+
此致
马希
您可以 split
列 |
创建一个 数组 和 分解 df 数据框。
Example:
import org.apache.spark.sql.functions._
columnList.withColumn("column_name",explode(split(col("column_name"),"\|"))).
show()
//+-----------+--------+
//|column_name|datatype|
//+-----------+--------+
//| ABC| string|
//| EFG| string|
//| IJK| string|
//| LMN| string|
//+-----------+--------+
试试下面的代码。
scala> df.select(split($"column_name","\|").as("column_name"),$"datatype").select(explode($"column_name"),$"datatype").show(false)
+---+--------+
|col|datatype|
+---+--------+
|ABC|string |
|EFG|string |
|IJK|string |
|LMN|string |
+---+--------+
我正在使用 AWS EMR v5.29.0 Spark v2.4.4 和 Scala v2.11.12。
我正在使用推断模式方法读取文件,并使用以下代码创建包含列名和列名数据类型的数据框
val df = spark.read.options(Map("inferSchema"->"true","header"->"true")).csv("s3://bucket-name/File_Name.csv")
val columnList = df.schema.fields.map(field => (field.name, field.dataType.typeName)).toList.toDF("column_name","datatype")
当我执行 df.printSchema() 时,输出如下。
df.printSchema()
Output:
root
|-- ABC|EFG|IJK|LMN: string (nullable = true)
当我在做 columnList.show() 输出如下
+--------------------+--------+
| column_name|datatype|
+--------------------+--------+
|ABC|EFG|IJK|LMN | string|
+--------------------+--------+
所需的输出如下所示。
+---------------+--------+
|column_name |datatype|
+---------------+--------+
|ABC |string |
|EFG |string |
|IJK |string |
|LMN |string |
+---------------+--------+
此致
马希
您可以 split
列 |
创建一个 数组 和 分解 df 数据框。
Example:
import org.apache.spark.sql.functions._
columnList.withColumn("column_name",explode(split(col("column_name"),"\|"))).
show()
//+-----------+--------+
//|column_name|datatype|
//+-----------+--------+
//| ABC| string|
//| EFG| string|
//| IJK| string|
//| LMN| string|
//+-----------+--------+
试试下面的代码。
scala> df.select(split($"column_name","\|").as("column_name"),$"datatype").select(explode($"column_name"),$"datatype").show(false)
+---+--------+
|col|datatype|
+---+--------+
|ABC|string |
|EFG|string |
|IJK|string |
|LMN|string |
+---+--------+