web-dev-qa-db-ja.com

AnalysisException:u "は、指定された入力列の 'name'を解決できません:[リスト] in sqlContext in spark

私は次のような簡単な例を試しました:

data = sqlContext.read.format("csv").option("header", "true").option("inferSchema", "true").load("/databricks-datasets/samples/population-vs-price/data_geo.csv")

data.cache() # Cache data for faster reuse
data = data.dropna() # drop rows with missing values
data = data.select("2014 Population estimate", "2015 median sales price").map(lambda r: LabeledPoint(r[1], [r[0]])).toDF()

それはうまくいきますが、次のような非常に似たものを試してみると:

data = sqlContext.read.format("csv").option("header", "true").option("inferSchema", "true").load('/mnt/%s/OnlineNewsTrainingAndValidation.csv' % MOUNT_NAME)

data.cache() # Cache data for faster reuse
data = data.dropna() # drop rows with missing values
data = data.select("timedelta", "shares").map(lambda r: LabeledPoint(r[1], [r[0]])).toDF()
display(data)

エラーが発生します:AnalysisException:u "指定された入力列 'timedelta'を解決できません:[data_channel_is_tech、...

コース外LabeledPointとLinearRegressionをインポートしました

何が間違っているのでしょうか?

もっとシンプルな場合でも

df_cleaned = df_cleaned.select("shares")

同じAnalysisException(エラー)を発生させます。

*注意:df_cleaned.printSchema()はうまく機能します。

11
Elm662

私は問題を見つけました:列名のいくつかは名前自体の前に空白を含んでいます。そう

data = data.select(" timedelta", " shares").map(lambda r: LabeledPoint(r[1], [r[0]])).toDF()

働いた。を使用して空白をキャッチできました

assert " " not in ''.join(df.columns)  

今、私は空白を削除する方法を考えています。どんなアイデアでも大歓迎です!

4
Elm662

ヘッダーにスペースまたはタブが含まれているため、スペースまたはタブを削除して試してください

1)私のスクリプト例

from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()

df=spark.read.csv(r'test.csv',header=True,sep='^')
print("#################################################################")
print df.printSchema()
df.createOrReplaceTempView("test")
re=spark.sql("select max_seq from test")
print(re.show())
print("################################################################")

2)入力ファイル。ここでは「max_seq」にスペースが含まれているため、次の例外が発生します。

Trx_ID^max_seq ^Trx_Type^Trx_Record_Type^Trx_Date

Traceback (most recent call last):
  File "D:/spark-2.1.0-bin-hadoop2.7/bin/test.py", line 14, in <module>
    re=spark.sql("select max_seq from test")
  File "D:\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.Zip\pyspark\sql\session.py", line 541, in sql
  File "D:\spark-2.1.0-bin-hadoop2.7\python\lib\py4j-0.10.4-src.Zip\py4j\Java_gateway.py", line 1133, in __call__
  File "D:\spark-2.1.0-bin-hadoop2.7\python\lib\pyspark.Zip\pyspark\sql\utils.py", line 69, in deco
pyspark.sql.utils.AnalysisException: u"cannot resolve '`max_seq`' given input columns: [Venue_City_Name, Trx_Type, Trx_Booking_Status_Committed, Payment_Reference1, Trx_Date, max_seq , Event_ItemVariable_Name, Amount_CurrentPrice, cinema_screen_count, Payment_IsMyPayment, r

2) 'max_seq'列の後のスペースを削除すると、正常に動作します

Trx_ID^max_seq^Trx_Type^Trx_Record_Type^Trx_Date


17/03/20 12:16:25 INFO DAGScheduler: Job 3 finished: showString at <unknown>:0, took 0.047602 s
17/03/20 12:16:25 INFO CodeGenerator: Code generated in 8.494073 ms
  max_seq
    10
    23
    22
    22
only showing top 20 rows

None
##############################################################
3
y durga prasad