def createDataFrame[A <: Product : TypeTag](data: Seq[A]): DataFrame = {}
Если вы видите выше функцию createDataFrame, которая принимает только подтип Product или TypeTag.
#1 val tupleData = List(("Java", "20000"), ("Python", "100000"), ("Scala", "3000"))
sc.createDataFrame(tupleData).toDF("col1","col2") // perfectly fine
Tuple2 является подтипом признака Product, поэтому он принимает список tuple2 для создания фрейма данных.
#2 val intData = List(1,2,3)
sc.createDataFrame(intData).toDF("col1")
В этом вы передаете список типа Int & Int, не являющийся sub Тип продукта или TypeTag.