我正在尝试将CSV文件转换为镶木地板,并且我正在使用Spark来完成此操作。
SparkSession spark = SparkSession .builder() .appName(appName) .config("spark.master", master) .getOrCreate(); DatasetlogFile = spark.read().csv("log_file.csv"); logFile.write().parquet("log_file.parquet");
现在的问题是我没有定义架构,列看起来像这样(输出在spark中使用printSchema()显示)
root |-- _c0: string (nullable = true) |-- _c1: string (nullable = true) |-- _c2: string (nullable = true) ....
csv在第一行有名称,但是我想它们被忽略了,问题是只有几列是字符串,我也有整数和日期。
我只使用Spark,基本上没有Avro或其他任何功能(从未使用过Avro)。
我定义模式有哪些选择?如何选择?如果我需要用其他方式编写镶木地板文件,那么只要它是一种快速简便的解决方案,就没有问题。
(我正在使用Spark Standalone进行测试/不知道Scala)
尝试使用目前存在的.option(“ inferschema”,“ true”)Spark-csv软件包。这将自动从数据推断模式。
您还可以使用结构类型为数据定义自定义架构,并使用.schema(schema_name)
来基于自定义架构读取。
val sqlContext = new SQLContext(sc) val customSchema = StructType(Array( StructField("year", IntegerType, true), StructField("make", StringType, true), StructField("model", StringType, true), StructField("comment", StringType, true), StructField("blank", StringType, true))) val df = sqlContext.read .format("com.databricks.spark.csv") .option("header", "true") // Use first line of all files as header .schema(customSchema) .load("cars.csv")