org.apache.spark.sql.AnalysisException: Cannot up cast `probability` from string to float as it may truncate
The type path of the target object is:
- field (class: "scala.Float", name: "probability")
- root class: "TFPredictionFormat"
You can either add an explicit cast to the input data or choose a higher precision type of the field in the target object;
此外,特别是对于它得到的短语
字段(检查case class[2])
org.apache.spark.sql.AnalysisException: cannot resolve '`phrases`' due to data type mismatch: cannot cast StringType to ArrayType(StringType,true);
如果我将case类[2]中的所有字段都定义为String类型,那么一切都很好,但这不是我想要的。有没有一个简单的方法做这件事[3]?
参考文献
B017NX63A2,Merrell,"['merrell_for_men', 'merrell_mens_shoes', 'merrel']",merrell_shoes,0.0806054356579781
import spark.implicits._
val INPUT_TF = "<SOME_URI>/my_file.csv"
final case class TFFormat (
doc_id: String,
brand: String,
phrases: Seq[String],
prediction: String,
probability: Float
)
val ds = sqlContext.read
.option("header", "true")
.option("charset", "UTF8")
.csv(INPUT_TF)
.as[TFFormat]
ds.take(1).map(println)
[3]我已经找到了这样做的方法,首先在DataFrame级别上定义列,然后将事情转换为Dataset(比如here或here或here),但我几乎可以肯定,这不是应该做的事情。我也很确定编码器可能是答案,但我不知道如何
TL;使用CSV
的DR和标准DataFrame
操作进行输入转换是可行的。如果您想避免,您应该使用具有表达性的输入格式(Parquet甚至JSON)。
通常,要转换为静态类型数据集的数据必须已经具有正确的类型。最有效的方法是为CSV
阅读器提供模式
参数:
val schema: StructType = ???
val ds = spark.read
.option("header", "true")
.schema(schema)
.csv(path)
.as[T]
其中架构
可以通过反射来推断:
import org.apache.spark.sql.catalyst.ScalaReflection
import org.apache.spark.sql.types.StructType
val schema = ScalaReflection.schemaFor[T].dataType.asInstanceOf[StructType]
import org.apache.spark.sql.functions._
val df: DataFrame = ??? // Raw data
df
.withColumn("probability", $"probability".cast("float"))
.withColumn("phrases",
split(regexp_replace($"phrases", "[\\['\\]]", ""), ","))
.as[TFFormat]
csv文件中的每一行结构如下:
问题内容: 不知道我在这里缺少什么,但是这段代码运行时没有任何错误消息,但是表中没有任何内容。我正在将三列的CSV值加载到mysql表中 如果有人可以看看,将不胜感激。 谢谢。 问题答案: 我认为您必须将所有内容插入。 像这样
其次,是否需要从Graphene DB实例访问csv导入文件,或者这是客户端关心的问题?
我需要将来自textarea输入的XML数据发布到PHP,以便解析它并输出一个表。 我尝试了一些方法,但似乎都不奏效。 目前我有: PHP是: 第一个回声$xmlraw正在工作——它在一行中输出XML字符串——帖子正在正确地发送数据。 第二个echo$xml不输出任何东西,Foreach也不输出任何东西——在PHP中有些东西不起作用 我还尝试将$xmlraw直接加载到simplexml_load_
NEO4J2.1.7 试图通过我在CSV中收到的信息大量连接一堆节点,如下所示: PS:我尝试了上面的语法,也尝试了,都没有用(语法错误)
新年快乐!!! 我知道以前也有人问过/回答过类似的问题,但我的问题不同: 我有100个字段和100MB的大尺寸csv,我想将其加载到Spark(1.6)进行分析,csv的标头看起来像附加的样本(只有一行数据) 非常感谢你。 更新1(美国东部时间2016年12月31日下午1:26): 我使用以下方法并能够加载数据(具有有限列的示例数据),但是,我需要自动将标头(来自csv)分配为DataFrame中