【发布时间】:2020-03-13 15:53:07
【问题描述】:
我正在尝试在 Spark 中读取一个 CSV 文件(应该有一个标题)并将数据加载到现有表中(具有预定义的列和数据类型)。 csv 文件可能非常大,所以如果 csv 中的列标题不是“有效”,我可以避免这样做会很棒。
当我当前正在读取文件时,我将 StructType 指定为架构,但这并不能验证标题是否包含正确顺序的正确列。 这就是我目前所拥有的(我正在另一个地方构建“模式”StructType):
sqlContext
.read()
.format("csv")
.schema(schema)
.load("pathToFile");
如果我添加 .option("header", "true)" 行,它将覆盖 csv 文件的第一行,并使用我在 StructType 的 add 方法中传递的名称。 (例如,如果我使用“id”和“name”构建 StructType,并且 csv 中的第一行是“idzzz,name”,则生成的数据框将包含“id”和“name”列。我希望能够验证csv 标题与我计划加载 csv 的表具有相同的列名称。
我尝试使用.head() 读取文件,并对第一行进行一些检查,但会下载整个文件。
欢迎提出任何建议。
【问题讨论】:
-
所以你真正想要的是读取文件的第一行,检查它是否等于一个字符串,然后决定是否要进一步处理你的文件,对吧?如果是这种情况,您是否考虑过不使用 spark 执行此处理步骤?在启动 spark 作业之前,甚至在文件上运行 bash 脚本之前,在驱动程序中使用纯 java 执行此操作可能会更容易。
-
基本上,是的。仍在考虑在 spark 之外提取“标题”部分。
标签: java csv apache-spark