Dataframe 如何使用Seq(..).toDF(..)语法创建超过22列的spark数据帧

Dataframe 如何使用Seq(..).toDF(..)语法创建超过22列的spark数据帧,dataframe,apache-spark-sql,Dataframe,Apache Spark Sql,我正在尝试创建类似这样的dataframe Seq .empty[(String, String, String, String, String, String, String, String, String, String, String, String, String,String, String, String, String, String, String, String, String, String, String )] .toDF(Se

我正在尝试创建类似这样的
dataframe

       Seq
  .empty[(String, String, String, String, String, String, String, String, String, String, String, String, String,String,
          String, String, String, String, String, String, String, String, String
  )]
  .toDF(Seq(EmployeeJobFieldsName.EMP_ID, EmployeeJobFieldsName.FIRST_NAME, EmployeeJobFieldsName.LAST_NAME, EmployeeJobFieldsName.FULL_NAME,
    EmployeeJobFieldsName.DOB, EmployeeJobFieldsName.GOVT_ID_TYPE, EmployeeJobFieldsName.GOVT_ID_TYPE_COUNTRY, EmployeeJobFieldsName.GOVT_ID_VALUE,
    EmployeeJobFieldsName.WORK_EMAIL, EmployeeJobFieldsName.PHONE, EmployeeJobFieldsName.PERSONAL_EMAIL, EmployeeJobFieldsName.HOME_ADDRESS_LINE_2,
    EmployeeJobFieldsName.HOME_ADDRESS_LINE_2, EmployeeJobFieldsName.HOME_CITY, EmployeeJobFieldsName.HOME_STATE, EmployeeJobFieldsName.HOME_COUNTRY,
    EmployeeJobFieldsName.HOME_POSTAL, EmployeeJobFieldsName.MAIL_ADDRESS_LINE_2, EmployeeJobFieldsName.MAIL_ADDRESS_LINE_2, EmployeeJobFieldsName.MAIL_CITY,
    EmployeeJobFieldsName.MAIL_STATE, EmployeeJobFieldsName.MAIL_COUNTRY, EmployeeJobFieldsName.MAIL_POSTAL, EmployeeJobFieldsName.EFF_END_DATE,
    EmployeeJobFieldsName.EFF_START_DATE, EmployeeJobFieldsName.EMP_STATUS, EmployeeJobFieldsName.STD_HOURS, EmployeeJobFieldsName.VENDOR_PAY_GROUP,
    EmployeeJobFieldsName.AMAZON_PAY_GROUP, EmployeeJobFieldsName.PAY_FREQUENCY, EmployeeJobFieldsName.EMP_TYPE, EmployeeJobFieldsName.COMP_FREQUENCY,
    EmployeeJobFieldsName.WORK_LOCATION, EmployeeJobFieldsName.WORK_LOCATION_TIME_ZONE, EmployeeJobFieldsName.WORK_STATE, EmployeeJobFieldsName.LAST_HIRE_DATE,
    EmployeeJobFieldsName.TERM_DATE, EmployeeJobFieldsName.COMPANY, EmployeeJobFieldsName.COMPANY_COUNTRY_ISO3, EmployeeJobFieldsName.COMPANY_COUNTRY_ISO2,
    EmployeeJobFieldsName.LOGIN_ID, EmployeeJobFieldsName.JOB_LEVEL, EmployeeJobFieldsName.DEPT_ID, EmployeeJobFieldsName.REG_OR_TEMP,
    EmployeeJobFieldsName.FULL_OR_PART_TIME, EmployeeJobFieldsName.EMP_CLASS, EmployeeJobFieldsName.JOB_CODE, EmployeeJobFieldsName.PAYROLL_ID,
    EmployeeJobFieldsName.SCHEDULE, EmployeeJobFieldsName.CURRENCY_CODE, EmployeeJobFieldsName.ANNUAL_RATE, EmployeeJobFieldsName.COMP_RATE,
    EmployeeJobFieldsName.HOURLY_RATE, EmployeeJobFieldsName.SHIFT_DIFFERENTIAL, EmployeeJobFieldsName.COMPANY_NAME, EmployeeJobFieldsName.COMPANY_DESC,
    EmployeeJobFieldsName.COMPANY_ADDRESS_LINE_2, EmployeeJobFieldsName.COMPANY_ADDRESS_LINE_2, EmployeeJobFieldsName.COMPANY_CITY,
    EmployeeJobFieldsName.COMPANY_STATE, EmployeeJobFieldsName.COMPANY_POSTAL): _*)

如果超过22,我就会出错。任何帮助,如何摆脱这个

由于scala只定义了
Tuple22
&
Product22
,您可以创建Tuple22的数据帧,如下所示-

val df1=Seq.empty[(
串,串,串,串,串,串,串,串,串,串,串,串,
串,串,串,串,串,串,串,串,串,串,串,串,
字符串,字符串)].toDF(范围(1,23).map(s=>s“col$s”):*)
df1.显示(错误)
/**
* +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
*| col1 | col2 | col3 | col4 | col5 | col6 | col7 | col9 | col10 | col11 | col12 | col13 | col14 | col16 | col17 | col18 | col19 | col20 | col22 ||
* +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
* +----+----+----+----+----+----+----+----+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
*/
由于未定义
Tuple23
Product23
,因此不能使用上述语法为超过22列创建数据帧

更新-1以创建超过22列的数据帧
如23列
1.定义
Product23
Tuple23
Product23.scala


对象产品23{
不适用的def[T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、T15、T16、T17、T18、T19、T20、T21、T22、T23]
(x:Product23[T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、T15、T16、T17、T18、T19、T20、T21、T22、T23])
:选项[产品23[T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、T15、T16、T17、T18、T19、T20、T21、T22、T23]]=
一些(x)
}
/**Product23是23个组件的笛卡尔乘积。
*@自2.3
*/
性状产品23[+T1,+T2,+T3,+T4,+T5,+T6,+T7,+T8,+T9,+T10,+T11,+T12,+T13,+T14,+T15,+T16,+T17,+T18,+T19,+T20,+T21,+T22,+T23]扩展了任何产品{
/**这个产品的质量。
*@return 23
*/
覆盖def productArity=23
/**如果0_1,则返回此乘积的第n个投影
案例1=>\u 2
案例2=>\u 3
案例3=>\u 4
案例4=>\u 5
案例5=>\u 6
案例6=>\u 7
案例7=>\u 8
案例8=>\u 9
案例9=>\u 10
案例10=>\u 11
案例11=>\u 12
案例12=>\u 13
案例13=>\u 14
案例14=>\u 15
案例15=>\u 16
案例16=>\u 17
案例17=>\u 18
案例18=>\u 19
案例19=>\u 20
案例20=>\u 21
案例21=>\u 22
案例22=>\u 23
case=>抛出新的IndexOutOfBoundsException(n.toString())
}
/**本产品元素1的投影。
*@返回元素1的投影。
*/
定义1:T1
/**本产品元素2的投影。
*@返回元素2的投影。
*/
定义2:T2
/**本产品元素3的投影。
*@返回元素3的投影。
*/
def_3:T3
/**本产品元素4的投影。
*@返回元素4的投影。
*/
def_4:T4
/**本产品元素5的投影。
*@返回元素5的投影。
*/
def_5:T5
/**本产品元素6的投影。
*@返回元素6的投影。
*/
def_6:T6
/**本产品元素7的投影。
*@返回元素7的投影。
*/
def_7:T7
/**本产品元素8的投影。
*@返回元素8的投影。
*/
def_8:T8
/**本产品元素9的投影。
*@返回元素9的投影。
*/
def_9:T9
/**本产品元素10的投影。
*@返回元素10的投影。
*/
定义10:T10
/**本产品元素11的投影。
*@返回元素11的投影。
*/
定义11:T11
/**本产品元素12的投影。
*@返回元素12的投影。
*/
定义12:T12
/**本产品元素13的投影。
*@返回元素13的投影。
*/
定义13:T13
/**本产品元素14的投影。
*@返回元素14的投影。
*/
定义14:T14
/**本产品元素15的投影。
*@返回元素15的投影。
*/
def_15:T15
/**本产品元素16的投影。
*@返回元素16的投影。
*/
定义16:T16
/**本产品元素17的投影。
*@返回元素17的投影。
*/
定义17:T17
/**本产品元素18的投影。
*@返回元素18的投影。
*/
定义18:T18
/**本产品元素19的投影。
*@返回元素19的投影。
*/
定义19:T19
/**本产品元素20的投影。
*@返回元素20的投影。
*/
def_20:T20
/**本产品元素21的投影。
*@返回元素21的投影。
*/
def_21:T21
/**本产品元素22的投影。
*@返回元素22的投影。
*/
def_22:T22
/**本产品元素23的投影。
*@返回元素23的投影。
*/
def_23:T23
}
Tuple23.scala


案例类别Tuple23[+T1、+T2、+T3、+T4、+T5、+T6、+T7、+T8、+T9、+T10、+T11、+T12、+T13、+T14、+T15、+T16、+T17、+T18、+T19、+T20、+T21、+T22、+T23]
(_1:T1、u 2:T2、u 3:T3、u 4:T4、u 5:T5、u 6:T6、u 7:T7、u 8:T8、u 9:T9、u 10:T10、u 11:T11、u 12:T12、u 13:T13、u 14:T14、u 15:T15、u 16:T16、u 17:T17、u 18:T18、u 19:T19、u 20:T20、u 21:T21、u 22:T23、)
扩展产品23[T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14、T1