我使用以下语句读取Spark中的CSV。
df = spark.read.csv('<CSV FILE>', header=True, inferSchema = True)
当我在Spark DataFrame中检查一些整数和双列被存储为DataFrame中的字符串列。但是,所有列都不是这种情况。
我已经检查了特定列的值,所有值均为双重类型,但仍然可以推断为stringType。
由于我正在加载大约1000列的CSV文件,因此也明确指定架构是不可行的。
任何建议/帮助都将不胜感激。
问:
neeraj
考虑该模式不会更改中台式(浮点将保持浮动在行中)。您可以编写一个小脚本以自动投射它们:
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])])