Spark schemaEvolution แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜

แƒซแƒ•แƒ˜แƒ แƒคแƒแƒกแƒ แƒ›แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ, แƒ™แƒแƒ แƒ’แƒ˜ แƒ“แƒฆแƒ”!

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ Neoflex-แƒ˜แƒก Big Data Solutions แƒ‘แƒ˜แƒ–แƒœแƒ”แƒก แƒ–แƒแƒœแƒ˜แƒก แƒฌแƒแƒ›แƒงแƒ•แƒแƒœแƒ˜ แƒ™แƒแƒœแƒกแƒฃแƒšแƒขแƒแƒœแƒขแƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒฆแƒฌแƒ”แƒ แƒก Apache Spark-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒก.

แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜, แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ˜แƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒแƒ“ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก.

แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒ”แƒ‘แƒ˜, แƒแƒœ แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘แƒ˜ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ แƒแƒ’แƒแƒ แƒช JSON แƒแƒœ XML. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ Hadoop-แƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒแƒฌแƒงแƒแƒ— แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ˜แƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ แƒ›แƒแƒ—แƒ’แƒแƒœ. แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ›แƒแƒ•แƒแƒฌแƒงแƒแƒ— แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒš แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒแƒ–แƒ”, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Impala-แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—.

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒกแƒแƒฅแƒ›แƒ” แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒแƒ› แƒซแƒแƒšแƒ˜แƒแƒœ แƒ—แƒแƒ•แƒ˜แƒกแƒฃแƒคแƒšแƒแƒ“ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ—แƒแƒœ.

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ“แƒฆแƒ”แƒก แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜:

{source: "app1", error_code: ""}

แƒ“แƒ แƒฎแƒ•แƒแƒš แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ แƒ›แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜:

{source: "app1", error_code: "error", description: "Network error"}

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒแƒก แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒแƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ•แƒ”แƒšแƒ˜ - แƒแƒฆแƒฌแƒ”แƒ แƒ แƒ“แƒ แƒแƒ แƒแƒ•แƒ˜แƒœ แƒ˜แƒชแƒ˜แƒก แƒ›แƒแƒ•แƒ แƒ—แƒฃ แƒแƒ แƒ.

แƒแƒกแƒ”แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ–แƒ” แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜แƒ แƒ“แƒ Spark-แƒก แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒแƒ”แƒ แƒ—แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒฅแƒ•แƒก. แƒฌแƒงแƒแƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒšแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ แƒแƒ’แƒแƒ แƒช JSON, แƒแƒกแƒ”แƒ•แƒ” XML แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ, แƒฎแƒแƒšแƒ แƒแƒ“แƒ แƒ” แƒฃแƒชแƒœแƒแƒ‘แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ schemaEvolution-แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ.

แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒฉแƒแƒœแƒก. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒ˜แƒฆแƒแƒ— แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” JSON-แƒ˜แƒ— แƒ“แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ˜แƒ’แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒจแƒ˜. Spark แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒแƒก, แƒ’แƒแƒ“แƒแƒแƒฅแƒชแƒ”แƒ•แƒก แƒฌแƒงแƒแƒ‘แƒ˜แƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒแƒ“. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ— แƒžแƒแƒ แƒ™แƒ”แƒขแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก Impala, แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ— Hive metastore-แƒจแƒ˜.

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ.

แƒ—แƒฃแƒ›แƒชแƒ, แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒ›แƒแƒ™แƒšแƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒ—แƒ”แƒšแƒ˜, แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒ›แƒ—แƒ”แƒš แƒ แƒ˜แƒ’ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ—แƒแƒœ.

แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒแƒฆแƒฌแƒ”แƒ แƒก แƒ›แƒ˜แƒ“แƒ’แƒแƒ›แƒแƒก แƒแƒ แƒ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“, แƒแƒ แƒแƒ›แƒ”แƒ“ JSON แƒแƒœ XML แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒจแƒ˜ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ˜แƒก แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ— แƒ“แƒ แƒ’แƒแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒ— JSON:

df = spark.read.json(path...)

แƒ”แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ’แƒแƒฎแƒ“แƒ”แƒก Spark-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜, แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒ“แƒแƒœ JSON แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ. แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ: แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ, แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ” แƒจแƒ”แƒ›แƒแƒ“แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒแƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒแƒก, แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ’แƒ•แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒก, แƒ แƒแƒ› แƒกแƒฅแƒ”แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒแƒ“แƒ”แƒก.

แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜แƒ:

แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ 1. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ Hadoop-แƒจแƒ˜ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ˜แƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ— แƒ“แƒ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒแƒฎแƒแƒš แƒ“แƒแƒœแƒแƒงแƒแƒคแƒก. แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ“แƒฆแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—.

แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ 2. แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ”แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ แƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ“แƒ”แƒ‘แƒ Spark-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒ แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ’แƒแƒกแƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ”แƒš แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒžแƒแƒ แƒ™แƒ”แƒขแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒ›แƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก Impala-แƒจแƒ˜. แƒ”แƒก แƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ’แƒแƒ›แƒแƒคแƒ”แƒœแƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ’แƒ แƒแƒ•แƒ“แƒ แƒแƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒแƒ›แƒ“แƒ”.

แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ 3. แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ‘แƒก แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ˜แƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒแƒก แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ”.
แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜, แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒ“แƒแƒงแƒแƒคแƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ“แƒ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜.

แƒแƒ•แƒ˜แƒฆแƒแƒ— แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜. แƒ“แƒแƒ•แƒฃแƒจแƒ•แƒแƒ—, แƒ แƒแƒ› แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ แƒ“แƒ JSON แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜.

แƒ›แƒแƒ—แƒ’แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ˜แƒกแƒ˜ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ— แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— Spark-แƒ˜แƒก แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜:

df = spark.read.option("mergeSchema", True).json(".../*") 
df.printSchema()

root 
|-- a: long (nullable = true) 
|-- b: string (nullable = true) 
|-- c: struct (nullable = true) |    
|-- d: long (nullable = true)

แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒฉแƒแƒœแƒก.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒ— แƒ“แƒ แƒ’แƒแƒ•แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ— JSON-แƒก, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒก แƒžแƒแƒ แƒ™แƒ”แƒขแƒแƒ“ แƒ“แƒ แƒ•แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ— แƒ›แƒแƒก Hive-แƒจแƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒ–แƒ˜แƒ—:

df.write.format(โ€œparquetโ€).option('path','<External Table Path>').saveAsTable('<Table Name>')

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒคแƒแƒœแƒฏแƒแƒ แƒแƒก.

แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ›แƒ”แƒแƒ แƒ” แƒ“แƒฆแƒ”แƒก, แƒฌแƒงแƒแƒ แƒแƒ“แƒแƒœ แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ. แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” JSON-แƒ˜แƒ— แƒ“แƒ แƒแƒ› แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ˜แƒ“แƒแƒœ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ. แƒฌแƒงแƒแƒ แƒแƒ“แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒฏแƒ’แƒฃแƒคแƒ˜แƒก แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ›แƒแƒ แƒขแƒก แƒแƒ™แƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ˜ แƒ“แƒฆแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜.

แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒ“แƒแƒงแƒแƒคแƒ แƒ“แƒฆแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜, แƒ แƒแƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜ แƒงแƒแƒ•แƒ”แƒš แƒ›แƒ”แƒแƒ แƒ” แƒ“แƒฆแƒ”แƒก. แƒแƒ›แƒ˜แƒก แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜แƒ, Spark แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒขแƒ˜แƒฎแƒ แƒ”แƒ‘แƒ˜ แƒชแƒแƒšแƒ™แƒ”.

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ— แƒกแƒแƒฌแƒงแƒ˜แƒก แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก, แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ–แƒ”แƒ›แƒแƒ— แƒ˜แƒงแƒ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜, แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ“แƒแƒงแƒแƒคแƒแƒก. แƒแƒ› แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒก แƒ”แƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒ แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒฎแƒ”แƒš:

df.write.partitionBy("date_load").mode("overwrite").parquet(dbpath + "/" + db + "/" + destTable)

แƒ›แƒ”แƒแƒ แƒ” แƒ“แƒฆแƒ”แƒก แƒฉแƒ•แƒ”แƒœ แƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒฎแƒแƒš แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก:

df.coalesce(1).write.mode("overwrite").parquet(dbpath + "/" + db + "/" + destTable +"/date_load=" + date_load + "/")

แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ Hive-แƒจแƒ˜ แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
แƒ—แƒฃแƒ›แƒชแƒ, แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒฅ แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ. แƒแƒ“แƒ แƒ” แƒ—แƒฃ แƒ’แƒ•แƒ˜แƒแƒœ, แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜ แƒฌแƒแƒฃแƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒ”แƒก แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ แƒฎแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜ แƒ“แƒ JSON แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ”แƒžแƒงแƒ แƒแƒ‘แƒ˜แƒแƒœ แƒชแƒแƒ แƒ˜แƒ”แƒš แƒ•แƒ”แƒšแƒ”แƒ‘แƒก.

แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒขแƒ˜แƒžแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ’แƒฃแƒจแƒ˜แƒœ JSON แƒฉแƒแƒ›แƒแƒ“แƒ˜แƒก:

ะ”ะตะฝัŒ 1: {"a": {"b": 1}},

แƒ“แƒ แƒ“แƒฆแƒ”แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” JSON แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

ะ”ะตะฝัŒ 2: {"a": null}

แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒก แƒแƒฅแƒ•แƒก แƒ”แƒ แƒ—แƒ˜ แƒฎแƒแƒ–แƒ˜.
แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒ•แƒ”แƒœ แƒฌแƒแƒ•แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒ— แƒ›แƒ—แƒšแƒ˜แƒแƒœ แƒฌแƒงแƒแƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก, Spark แƒจแƒ”แƒซแƒšแƒ”แƒ‘แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒก แƒขแƒ˜แƒžแƒ˜ แƒ“แƒ แƒ›แƒ˜แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ› "a" แƒแƒ แƒ˜แƒก "แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก" แƒขแƒ˜แƒžแƒ˜แƒก แƒ•แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜ แƒ•แƒ”แƒšแƒ˜ "b" แƒขแƒ˜แƒžแƒ˜แƒก INT. แƒ›แƒแƒ’แƒ แƒแƒ›, แƒ—แƒฃ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒ˜แƒงแƒ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒžแƒแƒ แƒ™แƒ”แƒขแƒก แƒจแƒ”แƒฃแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ—:

df1 (a: <struct<"b": INT>>)
df2 (a: STRING NULLABLE)

แƒ”แƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒแƒ แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒแƒ“ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ - แƒฌแƒงแƒแƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒ›แƒแƒ˜แƒฆแƒ”แƒ— แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜:

df = spark.read.json("...", dropFieldIfAllNull=True)

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒขแƒ˜แƒฎแƒ แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒแƒ“.
แƒ—แƒฃแƒ›แƒชแƒ, แƒ•แƒ˜แƒœแƒช แƒแƒ›แƒแƒก แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜ แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ“แƒ, แƒแƒฅ แƒ›แƒฌแƒแƒ แƒ”แƒ“ แƒ’แƒแƒ˜แƒฆแƒ˜แƒ›แƒ”แƒ‘แƒ. แƒ แƒแƒขแƒแƒ›? แƒ“แƒ˜แƒแƒฎ, แƒ แƒแƒ“แƒ’แƒแƒœ, แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜ โ€‹โ€‹แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒแƒœ แƒกแƒแƒ›แƒ˜. แƒแƒœ แƒแƒ—แƒฎแƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ, แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒ› แƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒ—แƒ˜ แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ JSON แƒคแƒแƒ˜แƒšแƒจแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, {intField: 1} แƒ“แƒ {intField: 1.1}. แƒ—แƒฃ แƒแƒกแƒ”แƒ—แƒ˜ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ’แƒ•แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ แƒ”แƒ แƒ— แƒ“แƒแƒœแƒแƒงแƒแƒคแƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒกแƒฌแƒแƒ แƒแƒ“, แƒ แƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ–แƒฃแƒกแƒข แƒขแƒ˜แƒžแƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒแƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ”แƒ แƒ—แƒก แƒ”แƒฅแƒœแƒ”แƒ‘แƒ intField: int, แƒฎแƒแƒšแƒ แƒ›แƒ”แƒแƒ แƒ”แƒก แƒ”แƒฅแƒœแƒ”แƒ‘แƒ intField: double.

แƒแƒ› แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒกแƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ“แƒ แƒแƒจแƒ:

df = spark.read.json("...", dropFieldIfAllNull=True, primitivesAsString=True)

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”, แƒกแƒแƒ“แƒแƒช แƒแƒ แƒ˜แƒก แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ”แƒ แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒแƒจแƒ˜ แƒ“แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“ แƒžแƒแƒ แƒ™แƒ”แƒขแƒจแƒ˜. แƒ“แƒ˜แƒแƒฎ? แƒแƒ แƒ.

แƒฃแƒœแƒ“แƒ แƒ’แƒ•แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒก, แƒ แƒแƒ› แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒ“แƒแƒ•แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ— Hive-แƒจแƒ˜. Hive แƒแƒ  แƒแƒ แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒจแƒ˜, แƒฎแƒแƒšแƒ แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ”แƒ‘แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ—: field1: int แƒ“แƒ Field1: int แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ Hive-แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ Spark-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒชแƒ˜แƒ แƒ” แƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒจแƒ˜ แƒ’แƒแƒ“แƒแƒงแƒ•แƒแƒœแƒ.

แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ—แƒ˜แƒ—แƒฅแƒแƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“แƒแƒ.

แƒ—แƒฃแƒ›แƒชแƒ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒกแƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒแƒ แƒ˜แƒก แƒ›แƒ”แƒแƒ แƒ”, แƒแƒกแƒ”แƒ•แƒ” แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜ แƒชแƒแƒšแƒ™แƒ” แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ, แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก Spark แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, _SUCCESS แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒจแƒแƒก. แƒ”แƒก แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜แƒก แƒ›แƒชแƒ“แƒ”แƒšแƒแƒ‘แƒ˜แƒกแƒแƒก. แƒแƒ›แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒ—แƒ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒ˜แƒชแƒ˜แƒšแƒแƒ— Spark-แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ:

hadoopConf = sc._jsc.hadoopConfiguration()
hadoopConf.set("parquet.enable.summary-metadata", "false")
hadoopConf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒแƒฎแƒšแƒ แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ” แƒแƒฎแƒแƒšแƒ˜ แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜แƒก แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ’แƒแƒ›แƒแƒคแƒ”แƒœแƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒก, แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒฆแƒ˜แƒก แƒ’แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒฉแƒ•แƒ”แƒœ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ•แƒ˜แƒ–แƒ แƒฃแƒœแƒ”แƒ—, แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ”แƒก แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ”แƒ‘แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒ™แƒแƒœแƒคแƒšแƒ˜แƒฅแƒขแƒ˜แƒ—.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก. แƒแƒฎแƒšแƒ แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜, แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, Hive-แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒก แƒแƒฅแƒ•แƒก แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜, แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒกแƒฅแƒ”แƒ›แƒแƒจแƒ˜ แƒ“แƒแƒ›แƒแƒฎแƒ˜แƒœแƒฏแƒ”แƒ‘แƒแƒก แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก.

แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒแƒ—. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“: แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜, แƒแƒ˜แƒฆแƒ”แƒ— แƒกแƒฅแƒ”แƒ›แƒ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒแƒงแƒ แƒ“แƒœแƒแƒ‘แƒ˜แƒ— DDL, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ“แƒแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ— แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” Hive-แƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ แƒ” แƒชแƒฎแƒ แƒ˜แƒšแƒ˜, แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ— แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ.

แƒ›แƒ”แƒแƒ—แƒฎแƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒแƒ•แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ—, แƒกแƒžแƒแƒ แƒ™แƒก แƒ“แƒแƒ•แƒ”แƒงแƒ แƒ“แƒ”แƒœแƒ˜แƒ—. แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ—แƒ•แƒ˜แƒ—แƒแƒœ แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ— แƒแƒ›แƒแƒก แƒ“แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒ•แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒก, แƒ แƒแƒ› แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜แƒก แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒแƒก แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ Hive-แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Spark แƒแƒ’แƒ“แƒ”แƒ‘แƒก แƒฎแƒแƒ–แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ•แƒ”แƒ  แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒ”แƒ‘แƒก "corrupt_record" แƒ•แƒ”แƒšแƒจแƒ˜. แƒแƒกแƒ”แƒ—แƒ˜ แƒ•แƒ”แƒšแƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ“แƒ”แƒก Hive-แƒจแƒ˜ แƒ’แƒแƒฅแƒชแƒ”แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒแƒ›แƒ˜แƒก แƒชแƒแƒ“แƒœแƒ, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒกแƒฅแƒ”แƒ›แƒแƒก:

f_def = ""
for f in pf.dtypes:
  if f[0] != "date_load":
    f_def = f_def + "," + f[0].replace("_corrupt_record", "`_corrupt_record`") + " " + f[1].replace(":", "`:").replace("<", "<`").replace(",", ",`").replace("array<`", "array<") 
table_define = "CREATE EXTERNAL TABLE jsonevolvtable (" + f_def[1:] + " ) "
table_define = table_define + "PARTITIONED BY (date_load string) STORED AS PARQUET LOCATION '/user/admin/testJson/testSchemaEvolution/pq/'"
hc.sql("drop table if exists jsonevolvtable")
hc.sql(table_define)

แƒ™แƒแƒ“แƒ˜ ("_corrupt_record", "`_corrupt_record") + " " + f[1].replace(":", "`:").replace("<", "<`").replace(",", ",`").replace("แƒ›แƒแƒกแƒ˜แƒ•แƒ˜<`", "แƒ›แƒแƒกแƒ˜แƒ•แƒ˜<") แƒฎแƒ“แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ DDL-แƒก, แƒแƒœแƒฃ แƒœแƒแƒชแƒ•แƒšแƒแƒ“:

create table tname (_field1 string, 1field string)

แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ "_field1, 1field", แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ DDL, แƒกแƒแƒ“แƒแƒช แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก: แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ `tname` (`_field1` string, `1field` string).

แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ: แƒ แƒแƒ’แƒแƒ  แƒกแƒฌแƒแƒ แƒแƒ“ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒฉแƒแƒ แƒฉแƒ แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒฅแƒ”แƒ›แƒ˜แƒ— (pf แƒ™แƒแƒ“แƒ˜แƒ—)? แƒ แƒแƒ’แƒแƒ  แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒ”แƒก pf? แƒ”แƒก แƒ›แƒ”แƒฎแƒฃแƒ—แƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒ. แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒ“แƒแƒœ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒžแƒแƒ แƒ™แƒ”แƒขแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—? แƒ”แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒ—แƒฃแƒšแƒ˜แƒ.

แƒกแƒฅแƒ”แƒ›แƒ แƒฃแƒ™แƒ•แƒ” Hive-แƒจแƒ˜แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒแƒฎแƒแƒšแƒ˜ แƒกแƒฅแƒ”แƒ›แƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ˜แƒ—. แƒแƒกแƒ” แƒ แƒแƒ›, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒ˜แƒฆแƒแƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ Hive-แƒ“แƒแƒœ แƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒแƒ— แƒ˜แƒ’แƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒแƒกแƒ—แƒแƒœ. แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ”แƒก Hive-แƒ“แƒแƒœ แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒ›แƒ”แƒขแƒแƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒ—, แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ— แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ˜แƒ— แƒ“แƒ แƒแƒ แƒ˜แƒ•แƒ” แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒฌแƒแƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ“ Spark-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—: แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ Hive-แƒจแƒ˜ แƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜. แƒฉแƒ•แƒ”แƒœแƒช แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒฎแƒแƒšแƒ˜ แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒก แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ˜แƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒแƒก แƒ“แƒ แƒแƒฎแƒแƒš แƒ•แƒ”แƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒ“แƒแƒœ:

from pyspark.sql import HiveContext
from pyspark.sql.functions import lit
hc = HiveContext(spark)
df = spark.read.json("...", dropFieldIfAllNull=True)
df.write.mode("overwrite").parquet(".../date_load=12-12-2019")
pe = hc.sql("select * from jsonevolvtable limit 1")
pe.write.mode("overwrite").parquet(".../fakePartiton/")
pf = spark.read.option("mergeSchema", True).parquet(".../date_load=12-12-2019/*", ".../fakePartiton/*")

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ˜แƒก DDL-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ˜แƒœแƒ แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒจแƒ˜.
แƒ—แƒฃ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒฏแƒแƒญแƒ•แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒกแƒฌแƒแƒ แƒแƒ“, แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ˜แƒงแƒ แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ“แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒกแƒฌแƒแƒ แƒแƒ“ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ Hive-แƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒฃแƒš แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒแƒก.

แƒ“แƒ แƒ‘แƒแƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜ Hive แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒ–แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒ’แƒแƒคแƒฃแƒญแƒ“แƒ”แƒ‘แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒ˜แƒซแƒฃแƒšแƒแƒ— Hive แƒจแƒ”แƒแƒกแƒฌแƒแƒ แƒแƒก แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒœแƒแƒงแƒแƒคแƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ:

from pyspark.sql import HiveContext
hc = HiveContext(spark) 
hc.sql("MSCK REPAIR TABLE " + db + "." + destTable)

JSON-แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒแƒ แƒแƒ”แƒ แƒ—แƒ˜ แƒ˜แƒ›แƒžแƒšแƒ˜แƒชแƒ˜แƒขแƒฃแƒ แƒ˜ แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒšแƒแƒฎแƒ•แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒช แƒชแƒแƒšแƒ™แƒ” แƒฃแƒœแƒ“แƒ แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒแƒ—. แƒ“แƒ แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ”แƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ, แƒ›แƒแƒ— แƒžแƒแƒ•แƒœแƒแƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ“แƒ แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ˜แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ:

  • แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒขแƒ˜แƒฎแƒ แƒ”แƒ‘แƒ˜ แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒแƒจแƒ˜, แƒ›แƒแƒ˜แƒชแƒ˜แƒšแƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜
  • แƒ’แƒแƒฃแƒ›แƒ™แƒšแƒแƒ•แƒ“แƒ”แƒ— แƒชแƒแƒ แƒ˜แƒ”แƒš แƒ•แƒ”แƒšแƒ”แƒ‘แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช Spark-แƒ›แƒ แƒแƒ™แƒ แƒ˜แƒคแƒ
  • แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒ”แƒ— แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒขแƒ˜แƒžแƒ”แƒ‘แƒ˜ แƒกแƒขแƒ แƒ˜แƒœแƒ’แƒ–แƒ”
  • แƒ’แƒแƒ“แƒแƒ˜แƒงแƒ•แƒแƒœแƒ”แƒ— แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒžแƒแƒขแƒแƒ แƒ แƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ”แƒ‘แƒจแƒ˜
  • แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒชแƒแƒšแƒ™แƒ” แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ“แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ Hive-แƒจแƒ˜ (DDL แƒ—แƒแƒแƒ‘แƒ)
  • แƒแƒ  แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ”แƒ— แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฅแƒชแƒ”แƒ•แƒ, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒฃแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒแƒก Hive-แƒ—แƒแƒœ
  • แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ”แƒ— แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒแƒ— แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒแƒชแƒ˜แƒ Hive-แƒจแƒ˜

แƒจแƒ”แƒฏแƒแƒ›แƒ”แƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒแƒ•แƒ—, แƒ แƒแƒ› แƒ›แƒแƒฆแƒแƒ–แƒ˜แƒ˜แƒก แƒ•แƒ˜แƒขแƒ แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ แƒกแƒแƒ•แƒกแƒ”แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ˜แƒ—. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ แƒ—แƒฃแƒšแƒ”แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒกแƒฏแƒแƒ‘แƒก แƒ“แƒแƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒš แƒžแƒแƒ แƒขแƒœแƒ˜แƒแƒ แƒก แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒ’แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ— แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒ›แƒ”แƒ“แƒแƒ•แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ› แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ