Sum*_*ing 0 scala partition apache-spark parquet
我发现我的业务代码中有一些非法数据,经过调试,我发现这个错误是由spark分区解析引起的,我应该如何做才能避免这个问题而不更改写入分区列。
\nimport org.apache.spark.sql.functions.lit\nimport spark.implicits._\n\nval df = Seq(("122D", 2), ("122F", 2), ("122", 2))\n .toDF("no", "value")\n .withColumn("other", lit(1))\n\nval path = "/user/my/output"\n\ndf\n .write\n .partitionBy("no","value")\n .parquet(path)\nRun Code Online (Sandbox Code Playgroud)\n我的预期结果是读为 aame 为 write
\ndf.show()\n+----+-----+-----+\n| no|value|other|\n+----+-----+-----+\n|122D| 2| 1|\n|122F| 2| 1|\n| 122| 2| 1|\n+----+-----+-----+\n\n// df.distinct.count==3\nRun Code Online (Sandbox Code Playgroud)\n实际读取结果是这样的
\nval read=spark.read.parquet(path)\n\nread.show()\n+-----+-----+-----+\n|other| no|value|\n+-----+-----+-----+\n| 1|122.0| 2|\n| 1|122.0| 2|\n| 1|122.0| 2|\n+-----+-----+-----+\n\n// read.distinct.count==1\n\nRun Code Online (Sandbox Code Playgroud)\n检查output目录结构是这样的
\xe2\x94\x94\xe2\x94\x80output\n \xe2\x94\x9c\xe2\x94\x80no=122\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80value=2\n \xe2\x94\x9c\xe2\x94\x80no=122D\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80value=2\n \xe2\x94\x94\xe2\x94\x80no=122F\n \xe2\x94\x94\xe2\x94\x80value=2\nRun Code Online (Sandbox Code Playgroud)\n非常感谢。\n我的 Spark 版本是2.4.5,scala 版本是2.11.12
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |