如何用单个值及Schema创建Spark DataFrame?代码报错求助
问题解决
错误原因分析
你的代码存在两个关键问题:
- 字符串赋值错误:
val filename=h:/filename1未给路径添加引号,Scala会将h识别为变量而非字符串字面量,直接导致编译失败。 - Seq构造逻辑错误:你错误地将三个变量拆成三个独立的字符串元素放入Seq,使得Seq包含3个单值元素(每个元素对应1列),但
toDF指定了3个列名,Spark会判定每个元素需要匹配3列,自然触发列数不匹配的异常。同时你使用的"+filename+"拼接方式不符合Scala语法,正确的变量引用无需额外拼接符号。
修正后的代码
val matchingcount = 3 val notmatchingcount = 5 val filename = "h:/filename1" // 给路径添加引号,作为字符串字面量 import spark.implicits._ // 将三个变量包装成一个元组,Seq内的每个元组对应DataFrame的一行,元组元素对应列 val data = Seq((filename, matchingcount, notmatchingcount)).toDF("ezfilename", "match_count", "non_matchcount") data.show()
代码说明
- 用元组
(filename, matchingcount, notmatchingcount)把三个值打包为一个元素,放入Seq后整个Seq仅包含1个元素,对应DataFrame的一行数据。 toDF的列名数量(3个)与元组的元素数量(3个)完全匹配,不会再抛出列数不匹配的异常。- 路径字符串添加双引号,确保Scala正确识别为字符串类型。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

