सेमेन्टिक्स मेटाडेटा के आधार पर निर्धारित किया जाता है।
import org.apache.parquet.hadoop.ParquetFileReader
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.hadoop.conf.Configuration
उदाहरण डेटा::
val path = "/tmp/ts"
Seq((1, "2017-03-06 10:00:00")).toDF("id", "ts")
.withColumn("ts", $"ts".cast("timestamp"))
.write.mode("overwrite").parquet(path)
और Hadoop विन्यास:
val conf = spark.sparkContext.hadoopConfiguration
val fs = FileSystem.get(conf)
अब हम स्पार्क मेटाडाटा का उपयोग कर सकते: हम कुछ आयात की आवश्यकता होगी
ParquetFileReader
.readAllFootersInParallel(conf, fs.getFileStatus(new Path(path)))
.get(0)
.getParquetMetadata
.getFileMetaData
.getKeyValueMetaData
.get("org.apache.spark.sql.parquet.row.metadata")
और परिणाम है:
String = {"type":"struct","fields: [
{"name":"id","type":"integer","nullable":false,"metadata":{}},
{"name":"ts","type":"timestamp","nullable":true,"metadata":{}}]}
समतुल्य जानकारी मेटास्टोर में भी संग्रहीत की जा सकती है।
आधिकारिक दस्तावेज इस हाइव और इम्पाला के साथ संगतता प्राप्त करने के लिए प्रयोग किया जाता है के अनुसार:
कुछ लकड़ी उत्पादक प्रणाली, विशेष इम्पाला और हाइव, INT96 में दुकान टाइमस्टैम्प में। यह ध्वज स्पार्क एसक्यूएल को इन सिस्टम के साथ संगतता प्रदान करने के लिए टाइमस्टैम्प के रूप में INT96 डेटा की व्याख्या करने के लिए बताता है।
और spark.sql.parquet.int96AsTimestamp
संपत्ति का उपयोग करके नियंत्रित किया जा सकता है।
दरअसल यह 8 + 4 बाइट्स है, 6 + 6 नहीं। इस प्रकार को दस्तावेज़ करने के लिए एक पुल अनुरोध है, https://github.com/apache/parquet-format/pull/49 देखें। – Zoltan
काफी सही, क्षमा करें। – mdurant