2016-08-18 31 views
4

我想一個簡單的例子,如:AnalysisException:U「無法解析‘名’給定的輸入列:[名單]在sqlContext火花

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,...

場外我進口LabeledPo int和LinearRegression

什麼可能是錯誤的?

即使是簡單的情況

df_cleaned = df_cleaned.select("shares") 

提出相同AnalysisException(錯誤)。

*請注意:df_cleaned.printSchema()效果很好。

回答

1

我發現問題:一些列名稱在名稱本身之前包含空格。 所以

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

工作。 我可以使用

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

現在我想到的方法來刪除空格趕上空格。任何想法都非常感謝!

2

因爲標題包含空格或製表符,刪除空格或製表符,並嘗試

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

回溯(最近通話最後一個): 文件「d:/ S park-2.1.0-bin-hadoop2.7/bin/test.py「,第14行,在 re = spark.sql(」select max_seq from test「) 文件」D:\ spark-2.1.0-bin -ddo \ python \ lib \ pyspark.zip \ pyspark \ sql \ session.py「,第541行,在sql 文件」D:\ spark-2.1.0-bin-hadoop2.7 \ python \ lib \ py4j -0.10.4-src.zip \ py4j \ java_gateway.py「,行1133,在調用 文件」D:\ spark-2.1.0-bin-hadoop2.7 \ python \ lib \ pyspark.zip \ pyspark \ sql \ utils.py「,第69行,在deco pyspark.sql.utils中。AnalysisException:U「無法解析 'max_seq' 給定的輸入列:[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十二時16分25秒INFO DAGScheduler:工作3完成:showString爲:0,把0.047602小號 17/03/20 12:16:25 INFO CodeGenerator:在8.494073 ms生成的代碼ms max_seq 只顯示前20行

相關問題