เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เชธเซเชชเชพเชฐเซเช• เชธเซเช•เซ€เชฎเชพ เช‡เชตเซ‹เชฒเซเชฏเซเชถเชจ

เชชเซเชฐเชฟเชฏ เชตเชพเชšเช•เซ‹, เชถเซเชญ เชฆเชฟเชตเชธ!

เช† เชฒเซ‡เช–เชฎเชพเช‚, Neoflex เชจเชพ เชฌเชฟเช— เชกเซ‡เชŸเชพ เชธเซ‹เชฒเซเชฏเซเชถเชจเซเชธ เชฌเชฟเชเชจเซ‡เชธ เชเชฐเชฟเชฏเชพเชจเชพ เช…เช—เซเชฐเชฃเซ€ เชธเชฒเชพเชนเช•เชพเชฐ เช…เชชเชพเชšเซ‡ เชธเซเชชเชพเชฐเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเซ‡เชฐเชฟเชฏเซ‡เชฌเชฒ เชธเซเชŸเซเชฐเช•เซเชšเชฐ เชถเซ‹เช•เซ‡เชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซเช‚ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡.

เชกเซ‡เชŸเชพ เชเชจเชพเชฒเชฟเชธเชฟเชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡, เชขเซ€เชฒเซ€ เชฐเซ€เชคเซ‡ เชธเซเชŸเซเชฐเช•เซเชšเชฐเซเชก เชกเซ‡เชŸเชพ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เช˜เชฃเซ€เชตเชพเชฐ เช‰เชฆเซเชญเชตเซ‡ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช† เชฒเซ‹เช—เซเชธ เช…เชฅเชตเชพ เชตเชฟเชตเชฟเชง เชธเชฟเชธเซเชŸเชฎเซ‹เชจเชพ เชชเซเชฐเชคเชฟเชธเชพเชฆเซ‹ เชนเซ‹เชฏ เช›เซ‡, เชœเซ‡ JSON เช…เชฅเชตเชพ XML เชคเชฐเซ€เช•เซ‡ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชกเซ‡เชŸเชพ Hadoop เชชเชฐ เช…เชชเชฒเซ‹เชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชชเช›เซ€ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡เชฅเซ€ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชฎเซ‡ เชฌเชจเชพเชตเซ‡เชฒ เชถเซ‹เช•เซ‡เชธเชจเซ€ เชเช•เซเชธเซ‡เชธ เช—เซ‹เช เชตเซ€ เชถเช•เซ€เช เช›เซ€เช, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, Impala เชฆเซเชตเชพเชฐเชพ.

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฒเช•เซเชทเซเชฏ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเชจเซ€ เชธเซเช•เซ€เชฎเชพ เช…เช—เชพเช‰เชฅเซ€ เชœเชพเชฃเซ€เชคเซ€ เชจเชฅเซ€. เชตเชงเซเชฎเชพเช‚, เชธเซเช•เซ€เชฎ เชชเชฃ เช…เช—เชพเช‰เชฅเซ€ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชกเซ‡เชŸเชพ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เช† เช–เซ‚เชฌ เชœ เชขเซ€เชฒเชพ เชฎเชพเชณเช–เชพเช—เชค เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชœเซ‡ เชจเซ€เชšเซ‡เชจเซ‹ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชฒเซ‰เช— เชฅเชฏเซ‡เชฒ เช›เซ‡:

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

เช…เชจเซ‡ เช†เชตเชคเซ€เช•เชพเชฒเซ‡ เช เชœ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚เชฅเซ€ เชจเซ€เชšเซ‡เชจเซ‹ เชœเชตเชพเชฌ เช†เชตเชถเซ‡:

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

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชถเซ‹เช•เซ‡เชธเชฎเชพเช‚ เชตเชงเซ เชเช• เช•เซเชทเซ‡เชคเซเชฐ เช‰เชฎเซ‡เชฐเชตเซเช‚ เชœเซ‹เชˆเช - เชตเชฐเซเชฃเชจ, เช…เชจเซ‡ เชคเซ‡ เช†เชตเชถเซ‡ เช•เซ‡ เชจเชนเซ€เช‚ เชคเซ‡ เช•เซ‹เชˆ เชœเชพเชฃเชคเซเช‚ เชจเชฅเซ€.

เช†เชตเชพ เชกเซ‡เชŸเชพ เชชเชฐ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เช–เซ‚เชฌ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช›เซ‡, เช…เชจเซ‡ เชธเซเชชเชพเชฐเซเช• เชชเชพเชธเซ‡ เช† เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชฌเชงเชพ เชธเชพเชงเชจเซ‹ เช›เซ‡. เชธเซเชคเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, JSON เช…เชจเซ‡ XML เชฌเช‚เชจเซ‡ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช›เซ‡, เช…เชจเซ‡ เช…เช—เชพเช‰เชจเซ€ เช…เชœเชพเชฃเซ€ เชธเซเช•เซ€เชฎเชพ เชฎเชพเชŸเซ‡, เชธเซเช•เซ€เชฎเชพ เชˆเชตเซ‹เชฒเซเชฏเซเชถเชจ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชชเซเชฐเชฅเชฎ เชจเชœเชฐเชฎเชพเช‚, เช‰เช•เซ‡เชฒ เชธเชฐเชณ เชฒเชพเช—เซ‡ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ JSON เชธเชพเชฅเซ‡ เชซเซ‹เชฒเซเชกเชฐ เชฒเซ‡เชตเชพเชจเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎเชฎเชพเช‚ เชตเชพเช‚เชšเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชธเซเชชเชพเชฐเซเช• เชธเซเช•เซ€เชฎเชพ เชฌเชจเชพเชตเชถเซ‡, เชจเซ‡เชธเซเชŸเซ‡เชก เชกเซ‡เชŸเชพเชจเซ‡ เชธเซเชŸเซเชฐเช•เซเชšเชฐเชฎเชพเช‚ เชซเซ‡เชฐเชตเชถเซ‡. เช†เช—เชณ, เชนเชพเช‡เชต เชฎเซ‡เชŸเชพเชธเซเชŸเซ‹เชฐเชฎเชพเช‚ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเชจเซ€ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเซ€เชจเซ‡, เชฆเชฐเซ‡เช• เชตเชธเซเชคเซเชจเซ‡ เชฒเชพเช•เชกเชพเชจเซ€ เชชเชŸเซเชŸเซ€เชฎเชพเช‚ เชธเชพเชšเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡ เช‡เชฎเซเชชเชพเชฒเชพเชฎเชพเช‚ เชชเชฃ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เช›เซ‡.

เชฌเชงเซเช‚ เชธเชฐเชณ เชฒเชพเช—เซ‡ เช›เซ‡.

เชœเซ‹ เช•เซ‡, เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เชธเชฎเชธเซเชฏเชพเช“เชจเซเช‚ เชถเซเช‚ เช•เชฐเชตเซเช‚ เชคเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚เชจเชพ เชŸเซ‚เช‚เช•เชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชฅเซ€ เชธเซเชชเชทเซเชŸ เชจเชฅเซ€.

เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎเชฎเชพเช‚ JSON เช…เชฅเชตเชพ XML เชตเชพเช‚เชšเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช…เชญเชฟเช—เชฎเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡.

เชœเซ‡เชฎ เช•เซ‡, เชคเซ‡ เชซเช•เซเชค JSON เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเช‚เชšเชตเซเช‚ เช…เชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเชตเซเช‚ เชคเซ‡ เชฌเชคเชพเชตเซ‡ เช›เซ‡:

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

เชธเซเชชเชพเชฐเซเช•เชจเซ‡ เชกเซ‡เชŸเชพ เช‰เชชเชฒเชฌเซเชง เช•เชฐเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช† เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡.

เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚, เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚เชฅเซ€ JSON เชซเชพเช‡เชฒเซ‹ เชตเชพเช‚เชšเชตเชพ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เชฌเชจเชพเชตเชตเชพ เช•เชฐเชคเชพเช‚ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชตเชงเซ เชœเชŸเชฟเชฒ เช›เซ‡. เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฒเชพเช—เซ‡ เช›เซ‡: เชคเซเชฏเชพเช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชเช• เชšเซ‹เช•เซเช•เชธ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸ เช›เซ‡, เชฆเชฐเชฐเซ‹เชœ เชจเชตเซ‹ เชกเซ‡เชŸเชพ เช†เชตเซ‡ เช›เซ‡, เชคเซ‡เชจเซ‡ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚ เช•เซ‡ เชฏเซ‹เชœเชจเชพ เช…เชฒเช— เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡.

เชถเซ‹เช•เซ‡เชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชฏเซ‹เชœเชจเชพ เชจเซ€เชšเซ‡ เชฎเซเชœเชฌ เช›เซ‡:

1 เชชเช—เชฒเซเช‚. เชกเซ‡เชŸเชพเชจเซ‡ เช…เชจเซเช—เชพเชฎเซ€ เชฆเซˆเชจเชฟเช• เชฐเซ€เชฒเซ‹เชกเชฟเช‚เช— เชธเชพเชฅเซ‡ Hadoop เชฎเชพเช‚ เชฒเซ‹เชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชจเชตเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡ เชฆเชฟเชตเชธ เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชœเชฟเชค เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชซเซ‹เชฒเซเชกเชฐ เชฌเชนเชพเชฐ เชตเชณเซ‡ เช›เซ‡.

2 เชชเช—เชฒเซเช‚. เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฒเซ‹เชก เชฆเชฐเชฎเชฟเชฏเชพเชจ, เช† เชซเซ‹เชฒเซเชกเชฐ เชธเซเชชเชพเชฐเซเช• เชฆเซเชตเชพเชฐเชพ เชตเชพเช‚เชšเชตเชพเชฎเชพเช‚ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเชฐเชฟเชฃเชพเชฎเซ€ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เชชเชพเชฐเซเชธเซ‡เชฌเชฒ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฒเชพเช•เชกเชพเช‚เชจเซ€ เช…เช‚เชฆเชฐ, เชœเซ‡ เชชเช›เซ€ เช‡เชฎเซเชชเชพเชฒเชพเชฎเชพเช‚ เช†เชฏเชพเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช† เช† เชฌเชฟเช‚เชฆเซ เชธเซเชงเซ€ เชเช•เช เชพ เชฅเชฏเซ‡เชฒเชพ เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชฒเช•เซเชทเซเชฏ เชชเซเชฐเชฆเชฐเซเชถเชจ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

3 เชชเช—เชฒเซเช‚. เชเช• เชกเชพเช‰เชจเชฒเซ‹เชก เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เชœเซ‡ เชฆเชฐเชฐเซ‹เชœ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชถเซ‡.
เช‡เชจเซเช•เซเชฐเซ€เชฎเซ‡เชจเซเชŸเชฒ เชฒเซ‹เชกเชฟเช‚เช—เชจเซ‹ เชชเซเชฐเชถเซเชจ เช›เซ‡, เชถเซ‹เช•เซ‡เชธเชจเซ‡ เชชเชพเชฐเซเชŸเซ€เชถเชจ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐเชฟเชฏเชพเชค เช…เชจเซ‡ เชถเซ‹เช•เซ‡เชธเชจเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชฏเซ‹เชœเชจเชพ เชœเชพเชณเชตเชตเชพเชจเซ‹ เชชเซเชฐเชถเซเชจ เช›เซ‡.

เชšเชพเชฒเซ‹ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชฒเชˆเช. เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชชเซเชฐเชฅเชฎ เชชเช—เชฒเซเช‚ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡, เช…เชจเซ‡ JSON เชซเชพเช‡เชฒเซ‹ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เช…เชชเชฒเซ‹เชก เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

เชคเซ‡เชฎเชจเซ€ เชชเชพเชธเซ‡เชฅเซ€ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เชฌเชจเชพเชตเชตเซ€, เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชถเซ‹เช•เซ‡เชธ เชคเชฐเซ€เช•เซ‡ เชธเชพเชšเชตเชตเซ€, เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เชจเชฅเซ€. เช† เช–เซ‚เชฌ เชœ เชชเซเชฐเชฅเชฎ เชชเช—เชฒเซเช‚ เช›เซ‡ เชœเซ‡ เชธเซเชชเชพเชฐเซเช• เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชฎเชพเช‚ เชธเชฐเชณเชคเชพเชฅเซ€ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡:

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 เชธเชพเชฅเซ‡เชจเซเช‚ เชเช• เชซเซ‹เชฒเซเชกเชฐ เช›เซ‡ เช…เชจเซ‡ เช† เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚เชฅเซ€ เชฌเชจเชพเชตเซ‡เชฒ เชถเซ‹เช•เซ‡เชธ เช›เซ‡. เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเซ€ เช†เช—เชฒเซ€ เชฌเซ‡เชš เชฒเซ‹เชก เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชกเซ‡เชŸเชพ เชฎเชพเชฐเซเชŸเชฎเชพเช‚ เชเช• เชฆเชฟเชตเชธเชจเซ‹ เชกเซ‡เชŸเชพ เช–เซ‚เชŸเซ‡ เช›เซ‡.

เชคเชพเชฐเซเช•เชฟเช• เช‰เช•เซ‡เชฒ เช เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเชจเซ‡ เชฆเชฟเชตเชธเซ‡ เชชเชพเชฐเซเชŸเซ€เชถเชจ เช•เชฐเชตเชพเชจเซ‹ เชนเชถเซ‡, เชœเซ‡ เชฆเชฐ เช†เช—เชฒเชพ เชฆเชฟเชตเชธเซ‡ เชเช• เชจเชตเซเช‚ เชชเชพเชฐเซเชŸเซ€เชถเชจ เช‰เชฎเซ‡เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡. เช† เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟ เชชเชฃ เชœเชพเชฃเซ€เชคเซ€ เช›เซ‡, เชธเซเชชเชพเชฐเซเช• เชคเชฎเชจเซ‡ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เช…เชฒเช—เชฅเซ€ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เช…เชฎเซ‡ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฒเซ‹เชก เช•เชฐเซ€เช เช›เซ€เช, เช‰เชชเชฐ เชตเชฐเซเชฃเชตเซเชฏเชพ เชฎเซเชœเชฌ เชกเซ‡เชŸเชพ เชธเชพเชšเชตเซ€เช เช›เซ€เช, เชซเช•เซเชค เชชเชพเชฐเซเชŸเซ€เชถเชจ เช‰เชฎเซ‡เชฐเซ€เช เช›เซ€เช. เช† เช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชœ เชตเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

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 เชฎเชพเช‚ เชซเชฐเซ€เชฅเซ€ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡.
เชœเซ‹ เช•เซ‡, เช† เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชธเชฎเชธเซเชฏเชพเช“ เชŠเชญเซ€ เชฅเชพเชฏ เช›เซ‡.

เชชเซเชฐเชฅเชฎ เชธเชฎเชธเซเชฏเชพ. เชตเชนเซ‡เชฒเชพ เช…เชฅเชตเชพ เชชเช›เซ€เชจเชพ, เชชเชฐเชฟเชฃเชพเชฎเซ€ เชฒเชพเช•เชกเชพเชจเซเช‚ เชชเชพเชคเชณเซเช‚ เชชเชก เชตเชพเช‚เชšเซ€ เชจ เชถเช•เชพเชฏ เชคเซ‡เชตเซเช‚ เชนเชถเซ‡. เช† เช•เชพเชฐเชฃ เช›เซ‡ เช•เซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ parquet เช…เชจเซ‡ JSON เช–เชพเชฒเซ€ เชซเซ€เชฒเซเชกเชจเซ‡ เช…เชฒเช— เชฐเซ€เชคเซ‡ เชตเชฐเซเชคเซ‡ เช›เซ‡.

เชšเชพเชฒเซ‹ เชเช• เชฒเชพเช•เซเชทเชฃเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ‹ เชตเชฟเชšเชพเชฐ เช•เชฐเซ€เช. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช—เชˆเช•เชพเชฒเซ‡ JSON เช†เชตเซ‡ เช›เซ‡:

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

เช…เชจเซ‡ เช†เชœเซ‡ เชคเซ‡ เชœ JSON เช†เชจเชพ เชœเซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

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

เชšเชพเชฒเซ‹ เช†เชชเชฃเซ‡ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเซ‡ เช…เชฒเช— เช…เชฒเช— เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เช›เซ‡, เชฆเชฐเซ‡เช• เชเช• เชฒเชพเชˆเชจ เชธเชพเชฅเซ‡.
เชœเซเชฏเชพเชฐเซ‡ เช†เชชเชฃเซ‡ เชธเชฎเช—เซเชฐ เชธเซเชคเซเชฐเซ‹เชค เชกเซ‡เชŸเชพ เชตเชพเช‚เชšเซ€เชถเซเช‚, เชคเซเชฏเชพเชฐเซ‡ เชธเซเชชเชพเชฐเซเช• เชชเซเชฐเช•เชพเชฐ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชฎเชฐเซเชฅ เชนเชถเซ‡, เช…เชจเซ‡ เชธเชฎเชœเซ€ เชถเช•เชถเซ‡ เช•เซ‡ "a" เช เชชเซเชฐเช•เชพเชฐเชจเซเช‚ "เชธเซเชŸเซเชฐเช•เซเชšเชฐ" เช•เซเชทเซ‡เชคเซเชฐ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ INT เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชจเซ‡เชธเซเชŸเซ‡เชก เชซเซ€เชฒเซเชก "b" เช›เซ‡. เชชเชฐเช‚เชคเซ, เชœเซ‹ เชฆเชฐเซ‡เช• เชชเชพเชฐเซเชŸเซ€เชถเชจ เช…เชฒเช—เชฅเซ€ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เชชเช›เซ€ เช…เชฎเชจเซ‡ เช…เชธเช‚เช—เชค เชชเชพเชฐเซเชŸเซ€เชถเชจ เชธเซเช•เซ€เชฎเซเชธ เชธเชพเชฅเซ‡ เชเช• เชฒเชพเช•เชกเชพเชจเซเช‚ เชชเชพเชคเชณเซเช‚ เชชเชก เชฎเชณเซ‡ เช›เซ‡:

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

เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชœเชพเชฃเซ€เชคเซ€ เช›เซ‡, เชคเซ‡เชฅเซ€ เชเช• เชตเชฟเช•เชฒเซเชช เช–เชพเชธ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เช›เซ‡ - เชœเซเชฏเชพเชฐเซ‡ เชธเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ‹, เชคเซเชฏเชพเชฐเซ‡ เช–เชพเชฒเซ€ เชซเซ€เชฒเซเชกเซเชธ เชฆเซ‚เชฐ เช•เชฐเซ‹:

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

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฒเชพเช•เชกเชพเชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เชนเชถเซ‡ เชœเซ‡ เชเช•เชธเชพเชฅเซ‡ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เช›เซ‡.
เชœเซ‹เช•เซ‡ เชœเซ‡เชฎเชฃเซ‡ เช† เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช‚ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เช“ เช…เชนเซ€เช‚ เช•เชกเชตเซเช‚ เชนเชธเชถเซ‡. เชถเชพ เชฎเชพเชŸเซ‡? เชนเชพ, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซเชฏเชพเช‚ เชตเชงเซ เชฌเซ‡ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“ เชนเซ‹เชตเชพเชจเซ€ เชถเช•เซเชฏเชคเชพ เช›เซ‡. เช…เชฅเชตเชพ เชคเซเชฐเชฃ. เช…เชฅเชตเชพ เชšเชพเชฐ. เชชเซเชฐเชฅเชฎ, เชœเซ‡ เชฒเช—เชญเช— เชšเซ‹เช•เซเช•เชธเชชเชฃเซ‡ เชฅเชถเซ‡, เชคเซ‡ เช›เซ‡ เช•เซ‡ เชธเช‚เช–เซเชฏเชพเชคเซเชฎเช• เชชเซเชฐเช•เชพเชฐเซ‹ เชตเชฟเชตเชฟเชง JSON เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เช…เชฒเช— เชฆเซ‡เช–เชพเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, {intField: 1} เช…เชจเซ‡ {intField: 1.1}. เชœเซ‹ เช†เชตเชพ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชเช• เชชเชพเชฐเซเชŸเซ€เชถเชจเชฎเชพเช‚ เชœเซ‹เชตเชพ เชฎเชณเซ‡ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เชธเซเช•เซ€เชฎเชพ เชฎเชฐเซเชœ เชฌเชงเซเช‚ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชตเชพเช‚เชšเชถเซ‡, เชœเซ‡ เชธเซŒเชฅเซ€ เชธเชšเซ‹เชŸ เชชเซเชฐเช•เชพเชฐ เชคเชฐเชซ เชฆเซ‹เชฐเซ€ เชœเชถเซ‡. เชชเชฐเช‚เชคเซ เชœเซ‹ เช…เชฒเช— เช…เชฒเช— เชนเซ‹เชฏ, เชคเซ‹ เชเช• เชชเชพเชธเซ‡ intField เชนเชถเซ‡: int, เช…เชจเซ‡ เชฌเซ€เชœเชพ เชชเชพเชธเซ‡ intField: เชกเชฌเชฒ เชนเชถเซ‡.

เช† เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเซ€เชšเซ‡เชจเซ‹ เชงเซเชตเชœ เช›เซ‡:

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

เชนเชตเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชเช• เชซเซ‹เชฒเซเชกเชฐ เช›เซ‡ เชœเซเชฏเชพเช‚ เชคเซเชฏเชพเช‚ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เช›เซ‡ เชœเซ‡ เชเช• เชœ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎเชฎเชพเช‚ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชธเชฎเช—เซเชฐ เชถเซ‹เช•เซ‡เชธเชจเซ€ เชฎเชพเชจเซเชฏ เชฒเชพเช•เชกเชพเชจเซเช‚ เชชเชพเชคเชณเซเช‚ เชชเชก เช›เซ‡. เชนเชพ? เชจเชพ.

เช†เชชเชฃเซ‡ เชฏเชพเชฆ เชฐเชพเช–เชตเซเช‚ เชœเซ‹เชˆเช เช•เซ‡ เช…เชฎเซ‡ เชฎเชงเชชเซ‚เชกเซ‹เชฎเชพเช‚ เชŸเซ‡เชฌเชฒ เชฐเชœเซ€เชธเซเชŸเชฐ เช•เชฐเซเชฏเซเช‚ เช›เซ‡. เชซเซ€เชฒเซเชกเชจเชพ เชจเชพเชฎเซ‹เชฎเชพเช‚ เชฎเชงเชชเซ‚เชกเซ‹ เช•เซ‡เชธ เชธเซ‡เชจเซเชธเชฟเชŸเชฟเชต เชจเชฅเซ€, เชœเซเชฏเชพเชฐเซ‡ เชฒเชพเช•เชกเซ€ เช•เซ‡เชธ เชธเซ‡เชจเซเชธเชฟเชŸเชฟเชต เช›เซ‡. เชคเซ‡เชฅเซ€, เชธเซเช•เซ€เชฎเชพ เชธเชพเชฅเซ‡เชจเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹: field1: int, เช…เชจเซ‡ Field1: int เช Hive เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เช›เซ‡, เชชเชฐเช‚เชคเซ Spark เชฎเชพเชŸเซ‡ เชจเชนเซ€เช‚. เชซเซ€เชฒเซเชกเชจเชพ เชจเชพเชฎเซ‹เชจเซ‡ เชฒเซ‹เช…เชฐเช•เซ‡เชธเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚.

เชคเซ‡ เชชเช›เซ€, เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡.

เชœเซ‹ เช•เซ‡, เชฌเชงเซเช‚ เชเชŸเชฒเซเช‚ เชธเชฐเชณ เชจเชฅเซ€. เชฌเซ€เชœเซ€, เชœเชพเชฃเซ€เชคเซ€ เชธเชฎเชธเซเชฏเชพ เชชเชฃ เช›เซ‡. เชฆเชฐเซ‡เช• เชจเชตเซเช‚ เชชเชพเชฐเซเชŸเซ€เชถเชจ เช…เชฒเช—เชฅเซ€ เชธเชพเชšเชตเชตเชพเชฎเชพเช‚ เช†เชตเชคเซเช‚ เชนเซ‹เชตเชพเชฅเซ€, เชชเชพเชฐเซเชŸเซ€เชถเชจ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเซเชชเชพเชฐเซเช• เชธเชฐเซเชตเชฟเชธ เชซเชพเช‡เชฒเซ‹ เชนเชถเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, _SUCCESS เช“เชชเชฐเซ‡เชถเชจ เชธเช•เซเชธเซ‡เชธ เชซเซเชฒเซ‡เช—. เช† เชฒเชพเช•เชกเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชญเซ‚เชฒเชฎเชพเช‚ เชชเชฐเชฟเชฃเชฎเชถเซ‡. เช†เชจเซ‡ เช…เชตเช—เชฃเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชธเซเชชเชพเชฐเซเช•เชจเซ‡ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เชธเซ‡เชตเชพ เชซเชพเช‡เชฒเซ‹ เช‰เชฎเซ‡เชฐเชตเชพเชฅเซ€ เชฐเซ‹เช•เชตเชพ เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช—เซ‹เช เชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

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

เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชนเชตเซ‡ เชฆเชฐเชฐเซ‹เชœ เชเช• เชจเชตเซเช‚ เชฒเชพเช•เชกเซเช‚ เชชเชพเชฐเซเชŸเซ€เชถเชจ เชฒเช•เซเชทเซเชฏ เชถเซ‹เช•เซ‡เชธ เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚ เชฆเชฟเชตเชธ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฟเชค เชกเซ‡เชŸเชพ เชธเซเชฅเชฟเชค เช›เซ‡. เช…เชฎเซ‡ เช…เช—เชพเช‰เชฅเซ€ เช•เชพเชณเชœเซ€ เชฒเซ€เชงเซ€ เชนเชคเซ€ เช•เซ‡ เชกเซ‡เชŸเชพ เชชเซเชฐเช•เชพเชฐ เชธเช‚เช˜เชฐเซเชท เชธเชพเชฅเซ‡ เช•เซ‹เชˆ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เชจเชฅเซ€.

เชชเชฐเช‚เชคเซ, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชคเซเชฐเซ€เชœเซ€ เชธเชฎเชธเซเชฏเชพ เช›เซ‡. เชนเชตเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชธเซเช•เซ€เชฎเชพ เชœเชพเชฃเซ€เชคเซ€ เชจเชฅเซ€, เชตเชงเซเชฎเชพเช‚, Hive เชฎเชพเช‚ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชเช• เช–เซ‹เชŸเซ€ เชธเซเช•เซ€เชฎเชพ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชฆเชฐเซ‡เช• เชจเชตเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจเชฎเชพเช‚ เชธเซเช•เซ€เชฎเชพเชฎเชพเช‚ เชตเชฟเช•เซƒเชคเชฟ เชœเซ‹เชตเชพ เชฎเชณเซ‡ เช›เซ‡.

เชคเชฎเชพเชฐเซ‡ เชŸเซ‡เชฌเชฒเชจเซ€ เชซเชฐเซ€เชฅเซ€ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เชธเชฐเชณ เชฐเซ€เชคเซ‡ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡: เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸเชจเซ€ เชฒเชพเช•เชกเชพเชจเซเช‚ เชชเชพเชคเชณเซเช‚ เชชเชก เชซเชฐเซ€เชฅเซ€ เชตเชพเช‚เชšเซ‹, เชธเซเช•เซ€เชฎเชพ เชฒเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ DDL เชฌเชจเชพเชตเซ‹, เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ 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].เชฌเชฆเชฒเซ‹(":", "`:").เชฌเชฆเชฒเซ‹("<", "<`").เชฌเชฆเชฒเซ‹(",", ",`").เชฌเชฆเชฒเซ‹("เชเชฐเซ‡<`", "เชเชฐเซ‡<") เชธเซเชฐเช•เซเชทเชฟเชค DDL เชฌเชจเชพเชตเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡:

create table tname (_field1 string, 1field string)

"_field1, 1field" เชœเซ‡เชตเชพ เชซเซ€เชฒเซเชก เชจเชพเชฎเซ‹ เชธเชพเชฅเซ‡, เชœเซเชฏเชพเช‚ เชซเซ€เชฒเซเชกเชจเชพ เชจเชพเชฎเซ‹ เช›เชŸเช•เซ€ เช—เชฏเชพ เชนเซ‹เชฏ เชคเซเชฏเชพเช‚ เชธเซเชฐเช•เซเชทเชฟเชค DDL เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡: เชŸเซ‡เชฌเชฒ `tname` (`_field1` เชธเซเชŸเซเชฐเชฟเช‚เช—, `1field` เชธเซเชŸเซเชฐเชฟเช‚เช—) เชฌเชจเชพเชตเซ‹.

เชชเซเชฐเชถเซเชจ เชŠเชญเซ‹ เชฅเชพเชฏ เช›เซ‡: เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเช•เซ€เชฎเชพ (pf เช•เซ‹เชกเชฎเชพเช‚) เชธเชพเชฅเซ‡ เชกเซ‡เชŸเชพเชซเซเชฐเซ‡เชฎ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ€? เช† เชชเซ€เชเชซ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชถเซ‹? เช† เชชเชพเช‚เชšเชฎเซ€ เชธเชฎเชธเซเชฏเชพ เช›เซ‡. เชซเซ‹เชฒเซเชกเชฐเชฎเชพเช‚เชฅเซ€ เชคเชฎเชพเชฎ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹เชจเซ€ เชธเซเช•เซ€เชฎเชจเซ‡ เชŸเชพเชฐเซเช—เซ‡เชŸ เชถเซ‹เช•เซ‡เชธเชจเซ€ เชฒเชพเช•เชกเชพเชจเซ€ เชซเชพเชˆเชฒเซ‹ เชธเชพเชฅเซ‡ เชซเชฐเซ€เชฅเซ€ เชตเชพเช‚เชšเซ‹? เช† เชชเชฆเซเชงเชคเชฟ เชธเซŒเชฅเซ€ เชธเชฒเชพเชฎเชค เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡.

เชธเซเช•เซ€เชฎเชพ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ Hive เชฎเชพเช‚ เช›เซ‡. เชคเชฎเซ‡ เชธเชฎเช—เซเชฐ เช•เซ‹เชทเซเชŸเช•เชจเซ€ เชธเซเช•เซ€เชฎเชพ เช…เชจเซ‡ เชจเชตเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจเชจเซ‡ เชœเซ‹เชกเซ€เชจเซ‡ เชจเชตเซ€ เชธเซเช•เซ€เชฎเชพ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹. เชคเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซ‡ Hive เชฎเชพเช‚เชฅเซ€ เชŸเซ‡เชฌเชฒ เชธเซเช•เซ€เชฎเชพ เชฒเซ‡เชตเชพเชจเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชจเชตเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจเชจเซ€ เชธเซเช•เซ€เชฎเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† 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 เชฌเชจเชพเชตเซ€เช เช›เซ€เช.
เชœเซ‹ เช†เช–เซ€ เชธเชพเช‚เช•เชณ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡, เชคเซเชฏเชพเช‚ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เชฒเซ‹เชก เชนเชคเซ‹, เช…เชจเซ‡ เช•เซ‹เชทเซเชŸเช• เชฎเชงเชชเซ‚เชกเซ‹เชฎเชพเช‚ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชคเซ‹ เชชเช›เซ€ เช…เชฎเชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ‡เชฒ เชŸเซ‡เชฌเชฒ เชธเซเช•เซ€เชฎเชพ เชฎเชณเซ‡ เช›เซ‡.

เช…เชจเซ‡ เช›เซ‡เชฒเซเชฒเซ€ เชธเชฎเชธเซเชฏเชพ เช เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชฎเชงเชชเซ‚เชกเซ‹ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชซเช•เซเชค เชชเชพเชฐเซเชŸเซ€เชถเชจ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เชคเชพ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชคเซ‚เชŸเซ€ เชœเชถเซ‡. เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเชพ เชชเชพเชฐเซเชŸเซ€เชถเชจ เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‡ เช เซ€เช• เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชงเชชเซ‚เชกเซ‹เชจเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

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

JSON เชตเชพเช‚เชšเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชธเซเชŸเซ‹เชฐเชซเซเชฐเชจเซเชŸ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชธเชฐเชณ เช•เชพเชฐเซเชฏ เช…เชธเช‚เช–เซเชฏ เช—เชฐเซเชญเชฟเชค เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชชเชฐเชฟเชฃเชฎเซ‡ เช›เซ‡, เช‰เช•เซ‡เชฒเซ‹ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเซ‡ เช…เชฒเช—เชฅเซ€ เชถเซ‹เชงเชตเซเช‚ เชชเชกเชถเซ‡. เช…เชจเซ‡ เช† เช‰เช•เซ‡เชฒเซ‹ เชธเชฐเชณ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชคเซ‡เชฎเชจเซ‡ เชถเซ‹เชงเชตเชพเชฎเชพเช‚ เช˜เชฃเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซ‡ เช›เซ‡.

เชถเซ‹เช•เซ‡เชธเชจเชพ เชฌเชพเช‚เชงเช•เชพเชฎเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพ เชฎเชพเชŸเซ‡, เชฎเชพเชฐเซ‡ เช† เช•เชฐเชตเซเช‚ เชชเชกเซเชฏเซเช‚:

  • เชถเซ‹เช•เซ‡เชธเชฎเชพเช‚ เชชเชพเชฐเซเชŸเซ€เชถเชจเซ‹ เช‰เชฎเซ‡เชฐเซ‹, เชธเซ‡เชตเชพ เชซเชพเช‡เชฒเซ‹เชฅเซ€ เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเซ‹
  • เชธเซเชชเชพเชฐเซเช•เซ‡ เชŸเชพเชˆเชช เช•เชฐเซ‡เชฒ เชธเซเชคเซเชฐเซ‹เชค เชกเซ‡เชŸเชพเชฎเชพเช‚ เช–เชพเชฒเซ€ เชซเซ€เชฒเซเชก เชธเชพเชฅเซ‡ เชกเซ€เชฒ เช•เชฐเซ‹
  • เชธเซเชŸเซเชฐเชฟเช‚เช— เชชเชฐ เชธเชฐเชณ เชชเซเชฐเช•เชพเชฐเซ‹ เช•เชพเชธเซเชŸ เช•เชฐเซ‹
  • เชซเซ€เชฒเซเชกเชจเชพ เชจเชพเชฎเซ‹เชจเซ‡ เชฒเซ‹เช…เชฐเช•เซ‡เชธเชฎเชพเช‚ เช•เชจเซเชตเชฐเซเชŸ เช•เชฐเซ‹
  • เชฎเชงเชชเซ‚เชกเซ‹ (DDL เชœเชจเชฐเซ‡เชถเชจ) เชฎเชพเช‚ เช…เชฒเช— เชกเซ‡เชŸเชพ เช…เชชเชฒเซ‹เชก เช…เชจเซ‡ เชŸเซ‡เชฌเชฒ เชจเซ‹เช‚เชงเชฃเซ€
  • Hive เชธเชพเชฅเซ‡ เช…เชธเช‚เช—เชค เชนเซ‹เชˆ เชถเช•เซ‡ เชคเซ‡เชตเชพ เชซเซ€เชฒเซเชก เชจเชพเชฎเซ‹เชฅเซ€ เชฌเชšเชตเชพเชจเซเช‚ เชญเซ‚เชฒเชถเซ‹ เชจเชนเซ€เช‚
  • Hive เชฎเชพเช‚ เช•เซ‹เชทเซเชŸเช• เชจเซ‹เช‚เชงเชฃเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเซ€ เชคเซ‡ เชœเชพเชฃเซ‹

เชธเชพเชฐเชพเช‚เชถเชฎเชพเช‚, เช…เชฎเซ‡ เชจเซ‹เช‚เชงเซ€เช เช›เซ€เช เช•เซ‡ เชฆเซเช•เชพเชจเชจเซ€ เชฌเชพเชฐเซ€เช“ เชฌเชจเชพเชตเชตเชพเชจเซ‹ เชจเชฟเชฐเซเชฃเชฏ เช˜เชฃเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชฅเซ€ เชญเชฐเชชเซ‚เชฐ เช›เซ‡. เชคเซ‡เชฅเซ€, เช…เชฎเชฒเซ€เช•เชฐเชฃเชฎเชพเช‚ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเชซเชณ เช•เซเชถเชณเชคเชพ เชงเชฐเชพเชตเชคเชพ เช…เชจเซเชญเชตเซ€ เชญเชพเช—เซ€เชฆเชพเชฐเชจเซ‹ เชธเช‚เชชเชฐเซเช• เช•เชฐเชตเซ‹ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡.

เช† เชฒเซ‡เช– เชตเชพเช‚เชšเชตเชพ เชฌเชฆเชฒ เช†เชญเชพเชฐ, เช…เชฎเชจเซ‡ เช†เชถเชพ เช›เซ‡ เช•เซ‡ เชคเชฎเชจเซ‡ เชฎเชพเชนเชฟเชคเซ€ เช‰เชชเชฏเซ‹เช—เซ€ เชฒเชพเช—เชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹