【问题标题】:Data type mismatch while transforming data in spark dataset在 Spark 数据集中转换数据时数据类型不匹配
【发布时间】:2017-09-07 20:26:49
【问题描述】:

我使用 spark 从 csv 文件创建了 parquet 结构:

Dataset<Row> df = park.read().format("com.databricks.spark.csv").option("inferSchema", "true")
            .option("header", "true").load("sample.csv");
df.write().parquet("sample.parquet");

我正在阅读镶木地板结构,并且正在尝试转换数据集中的数据:

Dataset<org.apache.spark.sql.Row> df = spark.read().parquet("sample.parquet");
df.createOrReplaceTempView("tmpview");
Dataset<Row> namesDF = spark.sql("SELECT *, md5(station_id) as hashkey FROM tmpview");

不幸的是,我收到了数据类型不匹配错误。我必须明确指定数据类型吗?

17/04/12 09:21:52 INFO SparkSqlParser:解析命令:SELECT *, md5(station_id) as hashkey FROM tmpview 线程“main”中的异常 org.apache.spark.sql.AnalysisException:无法解析 'md5(tmpview.station_id)' 由于数据类型不匹配:参数 1 需要二进制类型,但 'tmpview.station_id' 是 int 类型。; 第 1 行,第 10 行; '项目 [station_id#0, bikes_available#1, docks_available#2, time#3, md5(station_id#0) AS hashkey#16] +- 子查询别名 tmpview, tmpview +- 关系[station_id#0,bikes_available#1,docks_available#2,time#3] 实木复合地板

【问题讨论】:

    标签: java apache-spark apache-spark-sql parquet apache-spark-dataset


    【解决方案1】:

    是的,根据 Spark documentationmd5 函数仅适用于 binary(文本/字符串)列,因此您需要在应用 md5 之前将 station_id 转换为 string。在 Spark SQL 中,您可以将 md5cast 链接在一起,例如:

    Dataset<Row> namesDF = spark.sql("SELECT *, md5(cast(station_id as string)) as hashkey FROM tmpview");
    

    或者您可以在数据框中创建一个新列并在其上应用md5,例如:

    val newDf = df.withColumn("station_id_str", df.col("station_id").cast(StringType))
    newDf.createOrReplaceTempView("tmpview");
    Dataset<Row> namesDF = spark.sql("SELECT *, md5(station_id_str) as hashkey FROM tmpview");
    

    【讨论】:

      【解决方案2】:

      如果您在 Databricks (Azure Databricks Notebooks) 上遇到此错误 在 sn-p 之后在 3.x 集群上运行可能适合您。

      md5(cast(concat_ws('some string' + 'some string') + """)as BINARY))
      

      【讨论】:

        猜你喜欢
        • 2017-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多