Java 加入、聚合然后选择Apache Spark中的特定列

Java 加入、聚合然后选择Apache Spark中的特定列,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,产品和相应的销售都是从csv文件正确加载的,如下所示 Dataset<Row> dfProducts = sparkSession.read() .option("mode", "DROPMALFORMED") .option("header", "true") .option("inferSchema", "true") .option("charset", "UTF-8")

产品和相应的销售都是从csv文件正确加载的,如下所示

    Dataset<Row> dfProducts = sparkSession.read()
            .option("mode", "DROPMALFORMED")
            .option("header", "true")
            .option("inferSchema", "true")
            .option("charset", "UTF-8")
            .csv(new ClassPathResource("products.csv").getURL().getPath());
    Dataset<Row> dfSaledetails = sparkSession.read()
            .option("mode", "DROPMALFORMED")
            .option("header", "true")
            .option("inferSchema", "true")
            .option("charset", "UTF-8")
            .csv(new ClassPathResource("saledetails.csv").getURL().getPath());
哪一个抛出以下错误

原因:org.apache.spark.sql.AnalysisException:已解析属性product#name#215从product#id#272中丢失,operator中的total#amount#499!项目[产品名称215,总金额499]。;; !项目[产品名称215,总金额499] +-合计[产品编号272],[产品编号272,合计(金额277)为总金额499] +-连接内部(产品标识272=产品标识212) :-关系[销售详细信息自动识别码266,销售自动识别码267,销售识别码268,代理人识别码269,销售详细信息识别码270,库存识别码271,产品识别码272,单位成本273,单价274,增值税275,数量276,金额278,促销278 +-关系产品身份识别号(product-U-id)212,用户组(用户组)身份识别号(U-U-id)超级超级超级拥有者(213),产品类别214,产品名称215,产品名称215,产品类型216,产品类型216,产品类型216,产品类型216,产品类型216,产品代码(U-id)212,用户组(用户组)用户组(用户组)212,用户组(用户组)身份身份身份身份身份身份身份身份识别超级超级超级超级超级超级所有者(所有者)拥有者(所有者)213,213,产品类别类别214,产品类别类别类别214,产品名称215,产品名称215,产品名称215,产品名称名称215,产品名称215,产品名称,产品类型(名称215,产品类型,产品类型,产品类型216,产品类型216,产品类型,产品类型216,产品类型216,产品类型216,产品类型,产品类型216,产品类型,产品类型216,产品类型,216,产品类型,产品类型,216,产品类型,产品类型226,纸箱尺寸227,产品列表状态228,有效状态229,发行版butor#U型230,bundle#U型231,条形码#型232,产品#系列#id#233]csv


如果您想保留
产品名称
,它应该位于
groupBy

.groupBy(
  dfSaledetails.col("product_id"),
  col("product_name")))
或在
agg

.agg(
  sum(dfSaledetails.col("amount")).alias("total_amount"), 
  first(col("product_name")).alias("product_name"))

如果您想保留
产品名称
,它应该位于
groupBy

.groupBy(
  dfSaledetails.col("product_id"),
  col("product_name")))
或在
agg

.agg(
  sum(dfSaledetails.col("amount")).alias("total_amount"), 
  first(col("product_name")).alias("product_name"))