ORC ファイルを読み取り、その上でビジネス ロジックを実行する必要がある場合、spark 1.6.1 を使用してソリューションを構築しています。ORC ファイルの読み取りに関する Spark のドキュメントには、列形式の形式により、リーダーは現在のクエリに必要な列のみを読み取り、圧縮解除し、処理できると記載されています。しかし、私たちの場合、SQL クエリが 1 つの列のみを選択しても、SparkUI はファイル全体が読み取られていることを示しています。
ここで寄木細工のフォーマットに関する同様の質問を見つけました->特定の Parquet Column を読み込んでいる間、 Parquet-Sql で指定された単一の列ではなく、すべての列が読み込まれます。しかし、それは解決されていません。
サンプルコード
ORC ファイルは次のように作成されています。
lines = sc.textFile("file:///home/user/data/testdata.csv")
parts = lines.map(lambda l: l.split(","))
people = parts.map(lambda p: Row(id=int(p[0]),fname=p[1],mname=p[2],lname=p[3],address=p[4],marks=p[5],grade=p[6],age=p[7],experience=p[8]))
people.toDF().write.format("orc").save("/home/user/orcdata/people5m")
そして、次のように読まれます。
from pyspark.sql import HiveContext, Row
sqlContext = HiveContext(sc)
people = sqlContext.read.format("orc").load("/home/user/orcdata/people5m")
people.registerTempTable("people")
addresses = sqlContext.sql("SELECT 'address' FROM people")
addresses.count()
HDFS での ORC データのサイズは 91.6 M で、SparkUI では、ステージタブの [入力] 列に同じ数値 '91.6 M' が表示されます。このコードに何か問題がありますか? 誰かがこの動作を説明できますか?