java - Parquet 架构和 Spark

标签 java scala apache-spark parquet spark-csv

我正在尝试将 CSV 文件转换为 parquet,我正在使用 Spark 来完成此操作。

SparkSession spark = SparkSession
    .builder()
    .appName(appName)
    .config("spark.master", master)
    .getOrCreate();

Dataset<Row> logFile = 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)。

定义架构的选项有哪些?如何定义?如果我需要以其他方式编写 parquet 文件,那么没问题,只要它是一个快速简单的解决方案。

(我正在使用 spark standalone 进行测试/不知道 scala)

最佳答案

尝试使用 .option("inferschema","true") present 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")

关于java - Parquet 架构和 Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740499/

相关文章:

java - 在Java中模拟随机事件

java - 使用事件更改绘图程序中线条的颜色

java - 报警管理器运行

scala - 将 HList 传递给函数(带有隐式 LeftFolder)

html - 如何解析pyspark中的html文件并使用Beautifulsoup?

java - 在未安装 MS Access 的情况下将 Java 连接到 MS Access 数据库

scala - Apache Spark 当每个键的所有记录的大小大于单个分区的大小时调用重新分区($"key")会发生什么?

java - Scala 2.9 桥接方法

python - pyspark 在集群上,确保所有节点都被使用

apache-spark - 将后缀附加到 PySpark 行