web-dev-qa-db-ja.com

Spark 2.3.0ヘッダーオプション付きのテキストファイルの読み取りが機能しない

以下のコードは機能しており、テキストファイルからSparkデータフレームを作成します。ただし、ヘッダーオプションを使用して最初の列をヘッダーとして使用しようとしていますが、何らかの理由でそれができませんなぜだかわからない!ばかげているに違いないが、解決できない。

>>>from pyspark.sql import SparkSession
>>>spark = SparkSession.builder.master("local").appName("Word Count")\
    .config("spark.some.config.option", "some-value")\
    .getOrCreate()
>>>df = spark.read.option("header", "true")\
    .option("delimiter", ",")\
    .option("inferSchema", "true")\
    .text("StockData/ETFs/aadr.us.txt")
>>>df.take(3)

以下を返します。

[Row(value = u'Date、Open、High、Low、Close、Volume、OpenInt ')、Row(value = u'2010-07-21,24.333,24.333,23.946,23.946,43321,0')、Row (value = u'2010-07-22,24.644,24.644,24.362,24.487,18031,0 ')]

>>>df.columns

以下を返します。

['値']

4
Odisseo

問題

問題は、_.text_または_.csv_ではなく_.load_ API呼び出しを使用していることです。 。text api documentationを読むと、

def text(self, paths): """Loads text files and returns a :class:DataFrame whose schema starts with a string column named "value", and followed by partitioned columns if there are any. Each line in the text file is a new row in the resulting DataFrame. :param paths: string, or list of strings, for input path(s). df = spark.read.text('python/test_support/sql/text-test.txt') df.collect() [Row(value=u'hello'), Row(value=u'this')] """

。csvを使用したソリューション

_.text_関数呼び出しを_.csv_に変更します。

_df = spark.read.option("header", "true") \
    .option("delimiter", ",") \
    .option("inferSchema", "true") \
    .csv("StockData/ETFs/aadr.us.txt")

df.show(2, truncate=False)
_

あなたに与えるはず

_+-------------------+------+------+------+------+------+-------+
|Date               |Open  |High  |Low   |Close |Volume|OpenInt|
+-------------------+------+------+------+------+------+-------+
|2010-07-21 00:00:00|24.333|24.333|23.946|23.946|43321 |0      |
|2010-07-22 00:00:00|24.644|24.644|24.362|24.487|18031 |0      |
+-------------------+------+------+------+------+------+-------+
_

。loadを使用したソリューション

_.load_は、フォーマットオプションが定義されていない場合、ファイルが寄木細工形式であると想定します。したがって、フォーマットオプションを定義する必要があります

_df = spark.read\
    .format("com.databricks.spark.csv")\
    .option("header", "true") \
    .option("delimiter", ",") \
    .option("inferSchema", "true") \
    .load("StockData/ETFs/aadr.us.txt")

df.show(2, truncate=False)
_

答えが役に立てば幸いです

8
Ramesh Maharjan