AnalysisException:u"无法解析'name'给定输入列:[list]在spark中的sqlContext中

Elm*_*662 11 python linear-regression apache-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()
Run Code Online (Sandbox Code Playgroud)

它运作良好,但当我尝试非常相似的东西时:

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)
Run Code Online (Sandbox Code Playgroud)

它引发错误:AnalysisException:u"无法解析'timedelta'给定的输入列:[data_channel_is_tech,...

我当然导入了LabeledPoint和LinearRegression

可能有什么不对?

即使是更简单的情况

df_cleaned = df_cleaned.select("shares")
Run Code Online (Sandbox Code Playgroud)

引发相同的AnalysisException(错误).

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

Elm*_*662 9

我发现了这个问题:一些列名在名称本身之前包含空格。所以

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

工作。我可以使用

assert " " not in ''.join(df.columns)  
Run Code Online (Sandbox Code Playgroud)

现在我正在考虑一种删除空格的方法。任何想法都非常感谢!