我尝试了一个简单的例子,比如:
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)
它引起错误:
analysiseexception:u“无法解析给定输入列的'timedelta':[数据通道是技术…
离场时我导入了标签点和线性回归
可能有什么问题?
即使是更简单的情况
df_cleaned = df_cleaned.select("shares")
引发相同的AnalysisException(错误)。
*请注意:df_cleaned.printschema()工作正常。
最佳答案
我发现了这个问题:有些列名称在名称本身之前包含空格。
所以
data = data.select(" timedelta", " shares").map(lambda r: LabeledPoint(r[1], [r[0]])).toDF()
工作。
我可以用
assert " " not in ''.join(df.columns)
现在我正在考虑一种消除空白的方法。任何想法都非常感谢!