我正在从宽字符串中选择列,其偏移量如下所示
df2 = df.select( substring(col("a"), 4, 6).as("c")).cast(IntegerType)
但是我必须从字符串中提取1000列,如果我可以提供诸如列名、数据类型、宽度、起始位置和结束位置等详细信息,那么如何使用json sparkstruct模式生成select语句。
另外,我不得不将一些列转换为intergertype或longtype,但是我观察到这些字段被像
111111111将在转换为integertype时转换为1
最佳答案
如果可以使用configfactory将json转换为字符串
这只是一个三步的过程
val config = ConfigFactory.parseFile(new File(configFile))
val jsonColumns = config.getString("name.location")
val jsonColumnsArr = jsonColumns.split(",")
val mappedColNames = jsonColumnsArr.map(name => col(name))
df.select(mappedColNames: _*)
注:
1:configfile可以是从参数中获取的字符串
2:name和location是指向列名的json对象
关于scala - 从spark中的json模式动态生成df.select语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52597463/