我刚刚开始学习Spark。我知道以下事实:如果将 inferSchema选项设置为true ,则会自动推断出该架构。我正在读取一个简单的csv文件。我如何在不指定任何自定义模式的情况下动态推断模式。该代码应该能够为任何传入的数据集构建架构。
有可能这样做吗?
我尝试使用readStream并将我的格式指定为csv,而完全跳过了inferschema选项,但似乎无论如何我都需要提供该选项。
val ds1: DataFrame = spark
.readStream
.format("csv")
.load("/home/vaibha/Downloads/C2ImportCalEventSample.csv")
println(ds1.show(2))
答案 0 :(得分:1)
您可以动态推断模式,但在某些csv格式的情况下可能会有些乏味。阅读更多here。在代码示例中引用CSV文件并假定与here相同,以下内容将为您提供所需的信息:
scala> val df = spark.read.
| option("header", "true").
| option("inferSchema", "true").
| option("timestampFormat","MM/dd/yyyy").
| csv("D:\\texts\\C2ImportCalEventSample.csv")
df: org.apache.spark.sql.DataFrame = [Start Date : timestamp, Start Time: string ... 15 more fields]
scala> df.printSchema
root
|-- Start Date : timestamp (nullable = true)
|-- Start Time: string (nullable = true)
|-- End Date: timestamp (nullable = true)
|-- End Time: string (nullable = true)
|-- Event Title : string (nullable = true)
|-- All Day Event: string (nullable = true)
|-- No End Time: string (nullable = true)
|-- Event Description: string (nullable = true)
|-- Contact : string (nullable = true)
|-- Contact Email: string (nullable = true)
|-- Contact Phone: string (nullable = true)
|-- Location: string (nullable = true)
|-- Category: integer (nullable = true)
|-- Mandatory: string (nullable = true)
|-- Registration: string (nullable = true)
|-- Maximum: integer (nullable = true)
|-- Last Date To Register: timestamp (nullable = true)