我正在使用以下声明在spark中阅读csv。
df = spark.read.csv('<CSV FILE>', header=True, inferSchema = True)
当我检查spark数据帧时,一些整数和双列在数据帧中存储为字符串列。但是,所有列都不是这种情况。
我检查了特定列的值,所有值都是double类型,但仍然是spark推断为StringType。
由于我正在加载大约1000列的CSV文件,因此也无法明确指定架构。
任何建议/帮助都将受到高度赞赏。
此致
Neeraj
答案 0 :(得分:0)
考虑到模式不会改变中间表(浮动将保持浮动通过行)。 您可以编写一个小脚本来自动投射它们:
def isfloat(x):
try:
float(x)
except :
return False
else:
return True
line1 = df.head(1)[0]
df = df.select([c for c in df.columns if not isfloat(line1[c])] + [df[c].cast("float").alias(c) for c in df.columns if isfloat(line1[c])])
如果你认为第一行没有足够的信息,你可以这样做
N = 10
def isfloat(c):
try:
[float(x) in c]
except :
return False
else:
return True
Nlines = df.limit(N).toPandas()
df = df.select([c for c in df.columns if not isfloat(Nlines[c])] + [df[c].cast("float").alias(c) for c in df.columns if isfloat(Nlines[c])])